WebSocket很少能够发送数据)但每次都会收到

时间:2017-01-08 15:50:34

标签: javascript c# sockets websocket

握手成功,同时也调用了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(节点);'  它有效!

0 个答案:

没有答案