无法从客户端

时间:2016-05-06 17:43:29

标签: javascript jquery node.js socket.io

所以,我正在设置一个快速应用程序,包括护照,猫鼬,连接闪存等所有常用的应用程序,我正在使用socket.io来监听和发送消息。

目前,我只是向所有人发送消息(稍后将设置房间),一切(但这个)都很有效。当最终用户访问任何页面时,所有当前连接的用户都会收到消息“大家好!”,而刚刚连接的用户显然也会自动发送消息。一切都如预期一样......

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

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

点击后,会发出一条消息,说“我要注册!” (目前对所有人来说,但这并不重要)。作为回应,服务器应该听取这个并通过发回消息回复说“嗯,会考虑它!”。

服务器上从未听到过“注册”,因此无法发出“注册 - 响应”的回复。

谁能看到我做错了什么?

我已经看到了这个SocketIO, can't send emit data from client以及其他几个相似的但我已经在做他们建议的事了:/

NB :该应用正在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!');
});

1 个答案:

答案 0 :(得分:4)

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

你需要这样做

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!');
    });
});

套接字现在知道在收到“注册”时该做什么。活动并将回复发送给&#39; / events&#39;命名空间。