首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查WebSocket服务器是否运行(在本地主机上)

检查WebSocket服务器是否运行(在本地主机上)
EN

Stack Overflow用户
提问于 2017-02-08 12:17:18
回答 4查看 45.7K关注 0票数 7

当我尝试初始化到本地主机上运行的服务器的websocket连接时,

代码语言:javascript
运行
复制
var webSocket = new WebSocket("ws://localhost:8025/myContextRoot");

在javascript中,但是服务器尚未完成启动,我得到了错误

SCRIPT12029: WebSocket错误:网络错误12029,无法与服务器建立连接

我怎么才能阻止这一切?例如,如何检查服务器是否已经启动,或者如何强制WebSocket客户端等待服务器?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-02-08 12:39:39

那麽:

代码语言:javascript
运行
复制
var webSocketFactory = {
  connectionTries: 3,
  connect: function(url) {
    var ws = new WebSocket(url);
    ws.addEventListener("error", e => {
      // readyState === 3 is CLOSED
      if (e.target.readyState === 3) {
        this.connectionTries--;

        if (this.connectionTries > 0) {
          setTimeout(() => this.connect(url), 5000);
        } else {
          throw new Error("Maximum number of connection trials has been reached");
        }

      }
    });
  }
};

var webSocket = webSocketFactory.connect("ws://localhost:8025/myContextRoot");

当您得到连接错误时,您可以执行有限数量的试运行错误来尝试重新连接。或者,您可以不断地尝试访问服务器。

票数 16
EN

Stack Overflow用户

发布于 2018-03-21 18:04:21

被接受的答案是完全正确的。我只想用承诺把它再扩展一点。

代码语言:javascript
运行
复制
var wsFactory = { tryCount: 3,
                  connect : function(url){
                              var ctx = this,
                                  ws  = new WebSocket(url);

                              return new Promise(function(v,x){
                                                   ws.onerror   = e => { console.log(`WS connection attempt ${4-ctx.tryCount} -> Unsuccessful`);
                                                                         e.target.readyState === 3 && --ctx.tryCount;
                                                                         if (ctx.tryCount > 0) setTimeout(() => v(ctx.connect(url)), 1000);
                                                                         else x(new Error("3 unsuccessfull connection attempts"));
                                                                       };
                                                   ws.onopen    = e => { console.log(`WS connection Status: ${e.target.readyState}`);
                                                                         v(ws);
                                                                       };
                                                   ws.onmessage = m => console.log(m.data);
                                                 });
                            }
                };

wsFactory.connect("ws://localhost:8025/myContextRoot")
         .then(ws => ws.send("Hey..! This is my first socket message"))
         .catch(console.log);
票数 6
EN

Stack Overflow用户

发布于 2017-02-08 12:27:40

您不能阻止(或暂停) WebSocket启动/建立连接。WebSocket在其声明时自动与服务器建立连接。您可以做的是将所有代码放入要在成功连接上执行的onopen事件处理程序中。所以就像..。

代码语言:javascript
运行
复制
var webSocket = new WebSocket("ws://localhost:8025/myContextRoot");
webSocket.onopen = function() {
  // code you want to execute
};

查看文章,了解更多关于WebSocket的信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42112919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档