首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >em-websocket send()从一个客户端发送到另一个客户机,通过2台服务器发送

em-websocket send()从一个客户端发送到另一个客户机,通过2台服务器发送
EN

Stack Overflow用户
提问于 2015-05-28 18:24:40
回答 2查看 175关注 0票数 0

我有两个websocket客户端,我想在他们之间交换信息。

假设我有两个套接字服务器实例,第一个实例是检索私有信息,过滤它并发送到第二个实例。

代码语言:javascript
复制
require 'em-websocket'

EM.run do
  EM::WebSocket.run(host: '0.0.0.0', port: 19108) do |manager_emulator|
    # retrieve information. After that I need to send it to another port (9108)
  end

  EM::WebSocket.run(host: '0.0.0.0', port: 9108) do |fake_manager|
    # I need to send filtered information here
  end
end

我试着做了一些事情,但是我得到了通常的黑暗代码,我不知道如何实现这个功能。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-30 07:31:53

我找到了一种方法,如何通过em-websocket宝石!您只需要在事件机块之外定义变量。类似这样的东西

代码语言:javascript
复制
require 'em-websocket'

message_sender = nil

EM.run do
  # message sender
  EM::WebSocket.run(host: '0.0.0.0', port: 19108) do |ws|
    ws.onopen { message_sender = ws }
    ws.onclose { message_sender = nil }
  end

  # message receiver
  EM::WebSocket.run(host: '0.0.0.0', port: 9108) do |ws|
    ws.onmessage { |msg| message_sender.send(msg) if message_sender }
  end
end
票数 0
EN

Stack Overflow用户

发布于 2015-05-29 04:01:16

我不知道你用EM怎么做。

我假设您需要让fake_manager监听由manager_emulator触发的事件。

如果您使用的是websocket web应用程序框架,这将是相当容易的。例如,在Plezi web-app框架上您可以编写如下内容:

代码语言:javascript
复制
# try the example from your terminal.
# use http://www.websocket.org/echo.html in two different browsers to observe:
#
# Window 1: http://localhost:3000/manager
# Window 2: http://localhost:3000/fake

require 'plezi'

class Manager_Controller
    def on_message data
        FakeManager_Controller.broadcast :_send, "Hi, fake! Please do something with: #{data}\r\n- from Manager."
        true
    end
    def _send message
        response << message
    end
end
class FakeManager_Controller
    def on_message data
        Manager_Controller.broadcast :_send, "Hi, manager! This is yours: #{data}\r\n- from Fake."
        true
    end
    def _send message
        response << message
    end
end
class HomeController
    def index
        "use http://www.websocket.org/echo.html in two different browsers to observe this demo in action:\r\n" +
        "Window 1: http://localhost:3000/manager\r\nWindow 2: http://localhost:3000/fake\r\n"
    end
end

# # optional Redis URL: automatic broadcasting across processes or machines:
# ENV['PL_REDIS_URL'] = "redis://username:password@my.host:6379"

# starts listening with default settings, on port 3000
listen

# Setup routes:
# They are automatically converted to the RESTful route: '/path/(:id)'
route '/manager', Manager_Controller
route '/fake', FakeManager_Controller
route '/', HomeController

# exit terminal to start server
exit

祝好运!

附注:

如果要继续使用EM,可以考虑使用Redis来推送和订阅两个端口之间的事件。

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

https://stackoverflow.com/questions/30514341

复制
相关文章

相似问题

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