【问题标题】:Primus websocket server failed to read message from clientPrimus websocket 服务器无法从客户端读取消息
【发布时间】:2017-04-30 21:45:31
【问题描述】:

我使用 Primus 创建一个 websocket 服务器。我使用 wscat 命令来测试该服务器。它能够连接到 websocket 服务器。但是服务器无法接收来自客户端的任何消息。以下是 Primus 代码:

http = require('http');
server = http.createServer();

Primus = require('primus');
primus = new Primus(server, {
  transformer: 'websockets',
  pathname: 'ws'
});

primus.on('connection', function connection(spark) {
  console.log("client has connected");
  spark.write("Herro Client, I am Server");
  spark.on('data', function(data) {
    console.log('PRINTED FROM SERVER:', data);
    spark.write('receive '+data)
  });

});

server.listen(5431);
console.log("Server has started listening");

下面是我测试它的方式:

$ wscat -c  http://localhost:5431/ws
connected (press CTRL+C to quit)
< "Herro Client, I am Server"
> hello
> 

从上面的命令可以看出客户端可以在请求连接时收到消息。但是后来我向服务器发送了一个“你好”,而客户端没有收到来自服务器的反馈消息。服务器也不打印“hello”消息。我的代码有什么问题吗?看来spark.on('data', function(data)方法没有效果。

【问题讨论】:

    标签: node.js websocket primus


    【解决方案1】:

    您因未向服务器发送有效的 JSON 数据而引发了 spark 错误。

    message: '无法解码传入数据:JSON 中的意外标记 a 在位置 0'

    试试这个:

    http = require('http');
    server = http.createServer();
    
    Primus = require('primus');
    primus = new Primus(server, {
      transformer: 'websockets',
      pathname: 'ws'
    });
    
    
    primus.on('initialised', function() {
        console.log('Primus Initialized.');
    });
    
    primus.on('connection', function connection(spark) {
      console.log("client has connected");
    
      spark.write("Herro Client, I am Server");
    
      spark.on('data', function(data) {
        console.log('PRINTED FROM SERVER:', data);
        spark.write('received');
      });
    
      spark.on('heartbeat', function() {
        console.log('hearbeat...');
      });
    
    
      //happens after primus.disconnection
      spark.on('end', function() {
        console.log('spark end');
      });
    
      spark.on('error', function (v) {
        console.log('spark error', v);
      });
    
    });
    
    //happens before spark.end
    primus.on('disconnection', function (spark) {
        console.log('primus disconnection');
    });
    
    primus.on('error', function error(err) {
        console.log('primus error', err.stack);
    });
    
    server.listen(5431);
    

    它对我有用,如下所示:

    $ wscat -c 127.0.0.1:5431/ws/websocket
    connected (press CTRL+C to quit)
    < "Herro Client, I am Server"
    > {"a":"b"}
    < "received"
    > {"valid":"json"}
    < "received"
    

    【讨论】:

      猜你喜欢
      • 2016-01-31
      • 2016-03-18
      • 1970-01-01
      • 2017-09-15
      • 2015-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多