Node.js发出不在特定socket.on上工作

时间:2016-04-19 08:01:40

标签: node.js

我正在尝试向我的客户发送新闻。在连接时,它工作得很好,但由于某种原因broadcast2它不会得到客户端的任何响应,甚至知道它的相同代码,甚至broadcast2的console.log正在工作。

问:如何确保broadcast2 emit能够正常工作?

这有效:

socket.on('message', function (data) {
  console.log('message gotten');
  socket.emit('news', { message: 'xxxx' });
});

这不起作用:

socket.on('broadcast2', function (data) {
  console.log("broadcast revieced");
  socket.emit('news', { message: 'xxxx' });
});

这是node.js响应:

enter image description here

node.js中的总代码

socket.on('message', function (data) {
  console.log('message gotten');
});

socket.on('another-message', function (data) {
  socket.emit('not-news', { hello: 'world' });
});


socket.on('broadcast2', function (data) {
  console.log("broadcast revieced");
  socket.emit('news', { message: 'xxxx' });
});

这在客户端:

var socket = io.connect('mysite:8080');

function sender() {
  console.log('sending tester');
  socket.emit('sendertester', 2);
}

socket.on('connect',function(){

});



socket.on('tester', function(msg){
  console.log("callback");
});

socket.on('news', function(message) {
  console.log("INCOMMING NEWS");
  console.log(message);
});

更新1:

由PHP发送的broadcast2套接字:

function broadcast($message,$broadcast = 'broadcast2') {
  $client = new Client(new Version1X('myurlhidden:8080'));

  $client->initialize();
  $client->emit($broadcast, ['message' => $message]);
  $client->close();
}

更新2:

**问题二:导致我的广播2在客户端加载之前发送,然后客户端连接到节点,这可能是原因吗?

但同时,我已经预加载了包含broadcast2发射器的类。

使用codeigniter框架。**

更新3

我试图通过让两个用户登录来检查我的理论更新2,而用户1尝试执行触发器。用户二没有输出,所以我认为理论被破坏了。

1 个答案:

答案 0 :(得分:0)

服务器在连接之前无法向任何套接字发送消息。你必须等到听到收到你发送的东西的东西。

在发出之后我也不会调用close,因为你可能在客户端收到消息之前关闭连接,发出没有等待客户端在返回异步之前接收数据。 / p>

而是让客户端在终止时关闭连接。