gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 23:35:53 27 4
gpt4 key购买 nike

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

请求地址:ws://localhost:8015/

请求方式:GET

状态码:101 切换协议(protocol)

请求 header

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

响应 header

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); 使用参数 event(未定义)调用 onOpen 并返回 未定义(onOpen 不返回任何内容)。因此 connection.onopen 变成了 unefined。但是 connection.onopen 应该是一个函数。因此,不要调用这些函数,只需这样做:

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

关于javascript - websocket 客户端中的 onmessage 事件没有被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17607429/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com