首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >em-websocket和javascript客户端连接

em-websocket和javascript客户端连接
EN

Stack Overflow用户
提问于 2012-11-02 03:33:36
回答 1查看 718关注 0票数 1

我有一个简单的eventmachine web socket服务器(eventmachine 1.0.0):

代码语言:javascript
复制
EM.run {

  # WebSocket Server
  EM::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |ws|
    ws.onopen do
      sid = @channel.subscribe{|msg| ws.send msg }
      puts "* new WebSocket client <#{sid}> connected!"
    end

    ws.onmessage do |msg|
      puts "* websocket client <#{@sid}> : #{msg}"
    end

    ws.onclose do
      @channel.unsubscribe(sid)
      puts "* websocket client <#{@sid}> closed"
    end
  end
}

我正在尝试使用以下代码通过javascript客户端连接到它:

代码语言:javascript
复制
socket = new WebSocket("ws://localhost:8080");

socket.onopen = function(e) {
  socket.send('Connesso');
};

socket.onmessage = function(mess) {
  if (mess) {
    socket.send(mess);
  }
};

socket.onclose = function(e) {
  socket.send('Disconnesso');
};

在以前的safari版本中,它可以完美地处理客户端无法连接到服务器的最新版本。

我也尝试了上一个Chrome Dev稳定版本,但它不能工作。

web套接字标头已发送,但仍处于挂起状态。

如果我向web套接字发送文本消息,则会收到INVALID_STATE_ERR: DOM Exception 11

我看到有一个草案更改,但我认为em-websocket 0.3.8已经实现了它。

你能帮我解决这个问题吗?

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-09 14:45:13

INVALID_STATE_ERR: DOM异常11表示您的websocket尚未处于就绪状态。

您可以通过socket.readyState检查websocket对象的状态,当socket.readyState == 1时,您可以发送消息

我通过使用超时为此创建了一个转折点

代码语言:javascript
复制
timerId = setInterval(sendDataWhenReady, 1000);
function sendDataWhenReady(){
  if(socket.readyState == 1){
    ws.send(JSON.stringify({"type": 'STATUS', "status": status, "username": logged_in_user}))
    clearInterval(timerId);
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13184214

复制
相关文章

相似问题

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