websocket客户端中的onmessage事件没有被触发

片状贾德瓦尼

我正在使用node.js来实现websocket服务器和客户端。他们之间的握手看起来像这样。

要求网址:ws:// localhost:8015 /

请求方法:GET

状态码:101个交换协议

请求标题

Cache-Control: no-cache
Connection: Upgrade
Cookie: SQLiteManager_currentLangue=2
Host: localhost:8015
Origin: http:/localhost:8080
Pragma: no-cache
Sec-WebSocket-Extensions: x-webkit-deflate-frame
Sec-WebSocket-Key: A/knWtXFtTa5V6po8XOfjg==
Sec-WebSocket-Protocol: echo-protocol
Sec-WebSocket-Version: 13
Upgrade: websocket
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36

响应标题

Connection: Upgrade
Origin: http:/localhost:8080
Sec-WebSocket-Accept: 5OUv+g5mBPxVDug4etJfGX4lxIo=
Sec-WebSocket-Protocol: echo-protocol
Upgrade: websocket

服务器正在获取从客户端发送的消息(我正在控制台上记录消息),但是当服务器发送消息时,不会触发客户端中的onmessage事件。使我困惑的另一件事是,一旦打开连接,客户端中的onmessage事件仅被触发一次。

请帮助...我正在尝试将服务器上的消息回显给客户端。

编辑:

这就是我在websocket客户端中处理事件的方式...

html5WebSocketClient.connect = function(){
     if(window.WebSocket != undefined){
         if(connection.readyState == undefined || connection.readyState > 1)
             connection = new WebSocket('ws://localhost:8015/','echo-protocol');
     }
     if (window.MozWebSocket) {
          window.WebSocket = window.MozWebSocket;
     }

 connection.onopen = html5WebSocketClient.onOpen(event);
 connection.onmessage = html5WebSocketClient.onMessage(event);
 connection.onclose = html5WebSocketClient.onClose(event); 
 connection.onerror = html5WebSocketClient.onError(event);

};

html5WebSocketClient.onOpen = function(event)
{
    $('#some_label').text("Connected");
};

html5WebSocketClient.onClose = function(event)
{
    $('#some_label').text("Disconnected");
};

html5WebSocketClient.onError = function(event)
{
    $('#some_label').text("Error");
};

//This is only getting fired when connection opens
html5WebSocketClient.onMessage = function(message)
{
    if(message.data != undefined)
        {
        alert($.parseJSON(message.data));
    }
};

//Server is getting this message
html5WebSocketClient.sendMessage = function()
{
   var message = {"name": value, "name": value};
   connection.send(JSON.stringify(message));
};

这就是我实现服务器的方式。

var http = require('http');
var WebSocketServer = require('websocket').server;

var server = http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello Node.js From HTML5\n');
}).listen(8015, "127.0.0.1");

wsServer = new WebSocketServer({
    httpServer: server,
    autoAcceptConnections: false
});

wsServer.on('request', function(request) {

    var connection = request.accept('echo-protocol', request.origin);
    console.log((new Date()) + ' Connection accepted.');
    connection.on('message', function(message) {
        if (message.type === 'utf8') {
            console.log('Received Message: ' + message.utf8Data);
            connection.send(message.utf8Data); //Client is not getting this message..?
        }
    });
    connection.on('close', function(reasonCode, description) {
        console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.');
    });
});
怪异的

这些行负责您的问题:

connection.onopen = html5WebSocketClient.onOpen(event);
connection.onmessage = html5WebSocketClient.onMessage(event);
connection.onclose = html5WebSocketClient.onClose(event); 
connection.onerror = html5WebSocketClient.onError(event);

让我们分析一下。html5WebSocketClient.onOpen(event);调用onOpen带参数event(为undefined)并返回undefinedonOpen不返回任何内容)。从而connection.onopen成为unedefined但是connection.onopen应该是一个功能。因此,不必调用这些函数,只需执行以下操作:

connection.onopen = html5WebSocketClient.onOpen;
connection.onmessage = html5WebSocketClient.onMessage;
connection.onclose = html5WebSocketClient.onClose; 
connection.onerror = html5WebSocketClient.onError;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Websocket Javascript客户端onmessage不会触发

来自分类Dev

没有浏览器的Java Websocket客户端

来自分类Dev

JSF片段是否没有客户端加载事件?

来自分类Dev

Python客户端与socket.io v1.0建立连接并通过websocket触发事件

来自分类Dev

Kotlin中的Websocket客户端

来自分类Dev

Rails WebSocket客户端永远不会触发OnOpen

来自分类Dev

如何从客户端触发websocket框架碎片?

来自分类Dev

有没有可用的安全websocket(wss协议)客户端浏览器插件?

来自分类Dev

具有Spring集成(DI)且没有“ CONNECT”消息的Java WebSocket客户端

来自分类Dev

在Blazor客户端应用(剃刀组件)中,触发的每个事件是否都会刷新UI?

来自分类Dev

socket.io中的一个客户端无限次触发连接事件

来自分类Dev

客户端模板按钮事件未触发

来自分类Dev

Pusher不会“监听”客户端触发的事件

来自分类Dev

没有属性传给客户端

来自分类Dev

Tyrus Websocket客户端@OnMessage从未调用-Storj开源项目

来自分类Dev

Tryus websocket 客户端 - 尽管连接成功,但未调用 onMessage

来自分类Dev

如何在没有 node.js 的情况下在 js 中建立客户端 - 客户端连接?

来自分类Dev

具有usocket库的Common Lisp中的WebSocket客户端

来自分类Dev

WebSocket使用Python向所有客户端广播

来自分类Dev

WebSocket使用Python向所有客户端广播

来自分类Dev

在websocket库中获取客户端IP地址

来自分类Dev

如何在Julia中编写WebSocket客户端?

来自分类Dev

Java中的简单Websocket客户端-连接问题

来自分类Dev

在Spring Boot中编写客户端以连接到Websocket

来自分类Dev

在Golang中通过websocket编写客户端

来自分类Dev

如何从websocket客户端请求中获取参数

来自分类Dev

有没有办法在AWS ELB中获得客户端连接计数

来自分类Dev

有没有办法在Rasperry Pi的Raspbian Linux中禁用DHCP客户端?

来自分类Dev

存储库中是否有没有SNI支持的HTTPS客户端?

Related 相关文章

  1. 1

    Websocket Javascript客户端onmessage不会触发

  2. 2

    没有浏览器的Java Websocket客户端

  3. 3

    JSF片段是否没有客户端加载事件?

  4. 4

    Python客户端与socket.io v1.0建立连接并通过websocket触发事件

  5. 5

    Kotlin中的Websocket客户端

  6. 6

    Rails WebSocket客户端永远不会触发OnOpen

  7. 7

    如何从客户端触发websocket框架碎片?

  8. 8

    有没有可用的安全websocket(wss协议)客户端浏览器插件?

  9. 9

    具有Spring集成(DI)且没有“ CONNECT”消息的Java WebSocket客户端

  10. 10

    在Blazor客户端应用(剃刀组件)中,触发的每个事件是否都会刷新UI?

  11. 11

    socket.io中的一个客户端无限次触发连接事件

  12. 12

    客户端模板按钮事件未触发

  13. 13

    Pusher不会“监听”客户端触发的事件

  14. 14

    没有属性传给客户端

  15. 15

    Tyrus Websocket客户端@OnMessage从未调用-Storj开源项目

  16. 16

    Tryus websocket 客户端 - 尽管连接成功,但未调用 onMessage

  17. 17

    如何在没有 node.js 的情况下在 js 中建立客户端 - 客户端连接?

  18. 18

    具有usocket库的Common Lisp中的WebSocket客户端

  19. 19

    WebSocket使用Python向所有客户端广播

  20. 20

    WebSocket使用Python向所有客户端广播

  21. 21

    在websocket库中获取客户端IP地址

  22. 22

    如何在Julia中编写WebSocket客户端?

  23. 23

    Java中的简单Websocket客户端-连接问题

  24. 24

    在Spring Boot中编写客户端以连接到Websocket

  25. 25

    在Golang中通过websocket编写客户端

  26. 26

    如何从websocket客户端请求中获取参数

  27. 27

    有没有办法在AWS ELB中获得客户端连接计数

  28. 28

    有没有办法在Rasperry Pi的Raspbian Linux中禁用DHCP客户端?

  29. 29

    存储库中是否有没有SNI支持的HTTPS客户端?

热门标签

归档