Javascript WebSocket在打开后立即关闭

Javascript WebSocket在打开后立即关闭,javascript,websocket,go,Javascript,Websocket,Go,已建立与服务器的连接,并显示连接打开警报!然而,随后连接立即关闭。服务器不调用close,控制台中似乎没有其他错误。这在chrome和firefox中都有发生 我在网上看了很多不同的类似例子,但都没有用 修好了 我所要做的就是在websocket连接关闭之前阻止处理程序返回当您试图通过websocket连接发送二进制数据时,也可能会出现这种情况,但在某些方面(客户端或服务器)试图将其解释为文本-许多库和框架都会这样做,除非您明确指定您确实需要二进制数据。要保持Websocket打开,请通过ret

已建立与服务器的连接,并显示连接打开警报!然而,随后连接立即关闭。服务器不调用close,控制台中似乎没有其他错误。这在chrome和firefox中都有发生

我在网上看了很多不同的类似例子,但都没有用

修好了


我所要做的就是在websocket连接关闭之前阻止处理程序返回

当您试图通过websocket连接发送二进制数据时,也可能会出现这种情况,但在某些方面(客户端或服务器)试图将其解释为文本-许多库和框架都会这样做,除非您明确指定您确实需要二进制数据。

要保持Websocket打开,请通过
return false防止处理程序返回
connection.onmessage中
像这样:

connection = new WebSocket("ws://localhost:1050/join?username=test")

connection.onopen = function(){
   alert('Connection open!');
}


connection.onmessage = function(e){
   var server_message = e.data;
   alert(server_message);
}

connection.onclose = function() {
    alert("websocket closing")
}

这也可能是一个登录问题。websocket将自动关闭网站所需的身份验证,但未提供任何身份验证信息。

我相信我偶然发现了OP找到的解决方案,但不幸未能解释。我没有足够的声誉来评论,否则我会回应所有困惑的评论,要求对OP的回应做出澄清

简短的版本是,我认为OP指的是他的服务器端连接处理程序,他说“我所要做的就是在websocket连接关闭之前阻止处理程序返回”

原来我的服务器是自动关闭webSocket的,因为我不明白某个webSocket函数是如何工作的。具体来说,我使用了一个带有asyncio/WebSocket的Python服务器脚本和以下代码:

connection.onmessage = function(e){
   var server_message = e.data;
   alert(server_message);
   return false;
}
当时的想法是websockets.serve将使用handleClient开始连接并进行一些设置,然后使用ReceiveCommandsLop创建一个新任务,该任务将接管通信工作

但事实证明:当您调用websockets.service时,Python希望当您的处理程序(在本例中为handleClient)返回时,您必须处理好套接字,并且它会自动关闭它

因此,在运行receiveCommandsLoop时,handleClient已返回,webSocket已自动关闭


我可以通过修改handleClient函数直接运行最初包含在receiveCommandsLoop中的循环来解决这个问题。希望这对其他人有所帮助。

问题可能出在您的服务器代码中,您可以发布它吗?如果您使用
code.google.com/p/go.net/websocket
,处理程序函数退出后,连接将立即关闭。这是故意的,不会有任何错误。也许这就是问题所在?我正在用它。有没有办法避免这种情况的发生,或者这是我们无法解决的库设计的固有部分?我正在使用express ws,用于express应用程序的WebSocket端点。我在试图绕过应用程序路由并简单地使用wss.on('connection')时遇到了相同的问题服务器端。一旦我用app.ws('/ws')打开了一个应用程序路由,那么websocket连接将保持不变。请将您的答案标记为已接受。这很好,你能详细说明一下吗?我现在也有同样的问题。你说的处理者返回是什么意思?我不明白你的意思…你能提供一些关于你做了什么的详细信息吗?你说的在关闭连接之前返回处理者是什么意思?同一艘船,“阻止处理者返回”是什么意思?似乎你救了我的命
async def receiveCommandsLoop(player):
    while True:
        msg = await player.websocket.recv()
        print(command)

async def handleClient(websocket, path):
    username = await websocket.recv()
    player = players[username]

    ...

    #Start task to listen for commands from player
    asyncio.get_event_loop().create_task(receiveCommandsLoop(player))

start_server = websockets.serve(handleClient, '', 8765)