WebSocket服务器运行良好,但无法从客户端连接(我应该使用什么URL?)

yrwegjxp  于 2022-11-11  发布在  其他
关注(0)|答案(4)|浏览(139)

好的,这对任何使用过WebSocketnodejs的人来说都很简单。我创建了一个名为ws_server.js的websocket服务器,并将其放在C:\Program Files(x86)\nodejs中,我在那里安装了nodejs框架。我启动了服务器,它正在运行,它说它正在监听端口8080。到目前为止一切都很好,我让服务器运行起来了。
现在,我只想从客户端代码连接到它,这样我就可以使用事件侦听器等来捕获事件。问题是,令人尴尬的是,我不知道使用什么URL来连接到我的WebSocket服务器。

function init() { 
    testWebSocket(); 
}  

function testWebSocket() { 
    websocket = new WebSocket("ws://localhost:8080/"); // WHAT URL SHOULD BE USED HERE? 
    websocket.onopen = function(evt) { alert("OPEN") }; 

    websocket.onclose = function(evt) { alert("CLOSE") }; 
    websocket.onmessage = function(evt) { alert("MESSAGE") }; 
    websocket.onerror = function(evt) { alert("ERROR") }; 
}  

function doSend(message) { 
    // this would be called by user pressing a button somewhere
    websocket.send(message); 
    alert("SENT");
}  

window.addEventListener("load", init, false);

当我使用ws://localhost:8080时,触发的事件只有CLOSE和ERROR。我无法让客户端连接。我一定是遗漏了一些非常简单的东西。我是否需要在IIS中设置我的nodejs文件夹,例如,然后将其用作URL?
只是重申一下,WebSocket服务器运行良好,我只是不知道使用什么URL从客户端连接到它。
编辑:WebSocket服务器报告以下错误。客户端未请求指定的协议。

vjrehmav

vjrehmav1#

我想我已经让它的工作通过做以下。

var websocket = new WebSocket("ws://localhost:8080/","echo-protocol");

问题是我需要指定一个协议。至少现在我得到了onopen事件......如果没有其他什么的话

z9gpfhce

z9gpfhce2#

我看到了同样的错误,整个Web服务器都瘫痪了。添加协议可以修复它,但让我想知道为什么它是这样实现的。我的意思是,一个错误的请求不应该让你的服务器瘫痪。
你一定要用try/catch来封装它,但是这里提供的示例代码https://www.npmjs.com/package/websocket(2019-08-07)没有。这个问题可以很容易地避免。

jrcvhitl

jrcvhitl3#

我只是想分享一个疯狂的问题,我可以连接到一个旧版本的第三方应用程序在一台电脑的WebSocket,但不能连接到一个较新版本的应用程序在另一台电脑。
更重要的是,即使在新的计算机与新版本的应用程序,该应用程序能够连接到WebSocket,但无论我做了什么,当我试图与我自己的代码连接,我不断得到错误消息,websocket连接失败
长话短说,他们改变了Apache配置,允许通过代理连接到WebSocket。
在旧版本中,apache配置为:

ProxyPass /socket/ ws://localhost:33015/ retry=10
ProxyPass /socket ws://localhost:33015/ retry=10

在新版本中,apache配置更改为:

ProxyPass /socket/ ws://localhost:33015/ retry=10

不幸的是,我试图连接到ws://localhost/socket,而不是ws://localhost/socket/。结果,找不到代理,连接返回错误。
故事的寓意:请确保您正在尝试连接到存在的WebSocket url。

h79rfbju

h79rfbju4#

对我来说,解决方案是将URL从ws://更改为wss://。这是因为我连接的服务器已经更新了它的安全性,现在只接受wss。

相关问题