node-ws-multi-proxy 触った
ので、メモ。
subtleGradient/node-ws-multi-proxy · GitHub
There are some WebSocket servers that only support a single connected client at a time.
You may want to connect multiple clients to that same server.
This lets you do that.
まだモジュールのコードは読んでないけど、簡単なUsage 載ってるので、まるっと github のコード丸写しで試してみた
proxy.js
var WSP = require('ws-multi-proxy').WebSocketProxy // , ws = require('ws') , http = require('http') , fs = require('fs') , html = './test.html' , port = 3210 ; var app = http.createServer(function (req,res) { fs.readFile(html, "utf-8", function (err, data) { if (err) { console.log(err); res.writeHead(404); res.end(err.toString()); return; } console.log(data.length); res.writeHead(200, {'Content-Type' : 'text/html'}); res.end(data); }); }).listen(port) , wssConfig = { server : app } , proxy = new WSP({ webSocketServer : wssConfig }) ; proxy.mutateDataFromServer = proxy.mutateDataFromClient = function (data, sender, receiver) { if (data.myCustomToken != receiver.myCustomToken) return false; data.value += " lol, augmented value"; return data; }; console.log('app start to listen on port' + port);
test.html
<!doctype html> <meta charset="utf-8" /> <title>WebSocket Test</title> <script language="javascript" type="text/javascript"> var wsUri = "ws://localhost:3210/proxy/ws://echo.websocket.org"; //"ws://echo.websocket.org/"; var output; function init() { output = document.getElementById("output"); testWebSocket(); } function testWebSocket() { websocket = new WebSocket(wsUri); websocket.onopen = function(evt) { onOpen(evt) }; websocket.onclose = function(evt) { onClose(evt) }; websocket.onmessage = function(evt) { onMessage(evt) }; websocket.onerror = function(evt) { onError(evt) }; } function onOpen(evt) { writeToScreen("CONNECTED"); doSend("WebSocket rocks"); } function onClose(evt) { writeToScreen("DISCONNECTED"); } function onMessage(evt) { writeToScreen('<span style="color: blue;">RESPONSE: ' + evt.data + '</span>' ); websocket.close(); } function onError(evt) { writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data); } function doSend(message) { writeToScreen("SENT: " + message); websocket.send(message); } function writeToScreen(message) { var pre = document.createElement("p"); pre.style.wordWrap = "break-word"; pre.innerHTML = message; output.appendChild(pre); } window.addEventListener("load", init, false); </script> <h2>WebSocket Test</h2> <div id="output"></div> </html>
ターミナルから node proxy.js で、サーバーを立ち上げる
Chrome で http://127.0.0.1:3210/ を開く
うまくいくとこんな感じ