无法从客户端发出套接字消息

Cannot emit socket message from client

本文关键字:套接字 消息 客户端      更新时间:2023-09-26

所以,我正在建立一个快递应用程序,里面有护照、猫鼬、连接闪光灯等常见的功能,我正在使用socket.io来监听和发送消息。

目前,我只是向每个人发送信息(稍后会设置房间),一切(但这)都很好。当最终用户访问任何页面时,所有当前连接的用户都会收到一条消息";大家好&";,而刚刚连接的用户显然也会向自己发送消息。到目前为止,一切如预期。。。

问题:我有一个页面上有一个按钮…

<button id="register" type="button" class="btn btn-warning">Register</button>

单击时,会发出一条消息,上面写着"我想注册!"(目前对所有人来说,但这还不重要)。作为回应,服务器应该对此进行监听,并通过发出一条消息来回应,说"嗯,我会考虑的!"。

在服务器上从未听到"registering",因此无法发出"registration-response"的回复。

有人看到我做错了什么吗

我看过这个SocketIO,可以';t发送来自客户端和其他几个类似的发射数据,但我已经在做他们建议的事情:/

注意:应用程序在http://localhost:3000/上运行,io使用http://localhost:8678/events。如果你需要任何进一步的信息,请告诉我

客户端JS/jQuery(app.JS)

var app = app || {};
app = (function($){
    $(function () {
    
        /////////////////////////////////////////////////////
        // Connect to io and setup listeners
        /////////////////////////////////////////////////////
        var socket = io.connect('http://localhost:8678/events');
        socket.on('connected', function (data) {
            console.log(data); // Always see this in the console
        });
        socket.on('registration-response', function (data) {
            console.log(data); // NOT seen in console
        });
        /////////////////////////////////////////////////////
        // Setup click events
        /////////////////////////////////////////////////////
        $('#register').on('click', function(){
            console.log('click'); // Always see this, so no binding issue
            socket.emit('registering', 'I want to register!');
        });
    });
})(jQuery);

服务器端JS

var app = require('express');
var http = require('http');
var server = http.createServer(app);
var io = require('socket.io').listen(server);  //pass a http.Server instance
server.listen(8678);  //listen on port 8678
////////////////////////////////////////
// Register event listeners     
////////////////////////////////////////
var events = io.of('/events');
events.on('connection', function(socket){ // This is heard and callback fires
  events.emit('connected', 'Hi everyone!'); // This gets sent fine
});
events.on('registering', function(data){
  events.emit('registration-response', 'Hmmm, will think about it!');
});

服务器上的套接字没有设置为侦听事件。

你需要像这样做

events.on('connection', function(socket){ // This is heard and callback fires
    events.emit('connected', 'Hi everyone!'); // This gets sent fine
    socket.on('registering', function(data){
      events.emit('registration-response', 'Hmmm, will think about it!');
    });
});

套接字现在知道在接收到"registering"事件时该做什么,并将响应发送到"/events"命名空间。