2017-04-09 139 views
0

我現在實際上絕望了。我需要設計和編碼解決方案,我從來沒有想過我會做,而用乾淨的表達來實現(對我來說)似乎完全不現實。但我可能是錯的。Socket.IO服務器+ Socket.IO客戶端

我需要的是:

  • REST API - 做
  • Socket.IO服務器 - 做
  • 一堆Socket.IO客戶端連接的 - 可以做到

但現在,我需要的是一些有效的製作方式,相互溝通。所以應用程序必須基本上是它們之間的橋樑。我正在考慮使用某種狀態管理庫,比如Redux解決方案,這樣我(至少我認爲)可以很容易地實現。但是我也沒有發現任何這種節點,或者沒有找到如何在後端實現它。

所以問題是:什麼是最好的解決方案,實現多個socket.io連接之間的一對多和多對一的通信?再說一遍,說清楚。

套接字客戶端連接 =連接到已經存在的服務器,作爲節點應用程序。

我不是說爲客戶端在1臺服務器上相互通信做出簡單的解決方案。我想創建1個服務器,並連接到多個其他服務器。

+0

我是否正確?你想從同一瀏覽器/客戶端窗口獲得多個websocket連接到不同的服務器? – MildlySerious

+0

@MildlySerious no。我擔心我沒有解釋得很好。我想要從Node應用程序創建所有連接。服務器。到其他服務器。唯一的問題是架構,傳遞給我創建的服務器的數據必須傳遞給這些客戶端連接。這是明確的嗎? –

+0

這更清楚。有沒有理由使用socket.io?看起來像一個消息隊列或pubsub服務將成爲正確解決方案的問題。 – MildlySerious

回答

1

好吧,您可能想要做的是創建一個「服務器」應用程序,然後將您的Electron應用程序以及機器人作爲客戶端連接到該服務器。

對於將作爲自己的節點腳本運行的機器人,您將使用socket.io-client軟件包,然後以與在瀏覽器中使用客戶機的方式相同的方式使用它。呼叫io()與您的網絡連接,從獲取套接字,並開始結合您的活動如常:

let io = require('socket.io-client'); 
let socket = io('http://YOUR_SERVER_IP/'); 

socket.on('connect', function(){}); 
socket.on('event', function(data){}); 
socket.on('disconnect', function(){}); 

如果你想告訴機器人和電子客戶端之間的區別,我會送一些特殊事件在連接,你的服務器可以然後處理:

socket.on('connect', function(){ 
    socket.emit('identify_as_bot', {id: IDENTIFIER}) 
}); 

我希望有幫助。

+0

這實際上是我試圖避免的。按照這種方式,bot實例可以依靠一臺確切的服務器。我希望殭屍程序可用於多服務器連接 –

+0

您仍然可以使用多次調用'io'來打開多個套接字,或者連接到中央服務器,接收實際目標服務器的IP,然後連接到該服務器。這樣的事情你可以很有創意。或提供一個服務器IP池並隨機連接到一個。什麼都可以。 – MildlySerious

+0

但這需要我創建和更新這些白名單。正如你所描述的那樣,套接字的確是正確的使用方式,這個項目不適合商業用途,它只是爲了學習的目的,我想用我以前從未嘗試過的東西來挑戰自己。 :P –