握手成功,同时也调用了webSocket.onopen。当我从服务器(C#)向客户端(chrome,js)发送数据时,一切顺利,但是当我尝试从客户端向服务器发送数据时,大多数情况下都没有收到数据,并且任何一方都没有错误消息。首先我认为这是因为我接受数据的自定义方法,但似乎并非如此,因为socket.Avaliable也返回没有数据可用(甚至认为客户端显示它已发送)。告诉我是否需要服务器代码,但这是我的客户端。一旦页面完成加载就调用方法initialiseClient,并在onConnectListener的侦听器内调用发送消息:
/*Events*/
var onConnectListeners = [];
var onRecieveListeners = [];
var onDisconnectListeners = [];
function addConnectListener(listener)
{
onConnectListeners.push(listener);
}
function addRecieveListener(listener)
{
onRecieveListeners.push(listener);
}
function addDisconnectListener(listener)
{
onDisconnectListeners.push(listener);
}
function removeRecieveListener(listener)
{
onRecieveListeners.splice(onRecieveListeners.indexOf(listener));
}
function removeDisconnectListener(listener)
{
onDisconnectListeners.splice(onDisconnectListeners.indexOf(listener));
}
function removeConnectListener(listener)
{
onConnectListeners.splice(onConnectListeners.indexOf(listener));
}
/*Variables*/
var socket;
/*Initialisation*/
function initialiseClient(serverIP)
{
socket = new WebSocket(serverIP);
socket.onopen = onConnect;
socket.onmessage = onMessage;
socket.onclose = onDisconnect;
}
/*Socket Event Listeners*/
function onConnect()
{
for(var i = 0; i < onConnectListeners.length; i++)
onConnectListeners[i]();
}
function onDisconnect()
{
for(var i = 0; i < onDisconnectListeners.length; i++)
onDisconnectListeners[i]();
}
function onMessage(message)
{
console.log("MESSAGE: " + message);
for(var i = 0; i < onRecieveListeners.length; i++)
onRecieveListeners[i](message);
}
/*Sending*/
function send(data)
{
socket.send(data);
}
以下是截图:The message is sent thousands of time but received only a few times
在侧节点上:您是否注意到收到的文本总是不同(虽然这可能是我自己的代码中的一个问题,但在找出主要问题之前我无法确定)
编辑:我发现了这个问题!在服务器端,当我接受客户端时,我将它们添加到列表中,当接受完成时,我调用了提供的回调(执行了握手),但我没有从列表中删除该项目。因此,每次操作完成后,调用握手代码就会接受该数据,因此不会留下数据供我接收。
OLD:while (node != null)
{
if (node.Value.Task.IsCompleted)
{
if (node.Value.Task.IsFaulted || node.Value.Task.IsCanceled)
Console.Log("Failed!");
else
Utilities.Handshake(node.Value.Task.Result);
node = nextNode;
}
只需添加: 'node.List.Remove(节点);' 它有效!