Node.js 入門, #7:儲存用戶端 WebSocket 連線
.作者:jollen/
.日期:July 23, 2014 9:18 PM
本文章採用 Markdown 語法撰寫(why?),若無法閱讀內文,請點擊這裡。
儲存用戶端 WebSocket 連線
要儲存所有的用戶端 WebSocket 連線,最簡便的方式是使用 Global Array:
// Connected WebSocket clients
var clients = [];
當用戶端與 Node.js 建立連線時,將會回呼上述提及的 onWsRequest() 函數。所以,儲存連線的程式碼,應該添加至這個地方。繼續加入程式碼如下:
function onWsRequest(request) {
var connection = request.accept('echo-protocol', request.origin);
console.log("WebSocket connection accepted.");
// Save clients (unlimited clients)
clients.push(connection);
connection.on('message', onWsConnMessage);
connection.on('close', onWsConnClose);
}
以下目前為止的最新程式碼。
// 07-websocket-data-push/server.js
1 var http = require("http");
2 var url = require("url");
3 var WebSocketServer = require('websocket').server;
4
5 // Connected WebSocket clients
6 var clients = [];
7
8 function start(route, handlers) {
9 function onRequest(request, response) {
10 var pathname = url.parse(request.url).pathname;
11 var query = url.parse(request.url).query;
12
13 console.log("Request for " + pathname + " received.");
14
15 route(pathname, handlers, response, query, clients);
16
17 response.writeHead(200, {"Content-Type": "text/plain"});
18 response.write("Hello World");
19 response.end();
20 }
21
22 var server = http.createServer(onRequest).listen(8080, function() {
23 console.log("Server has started and is listening on port 8080.");
24 });
25
26 wsServer = new WebSocketServer({
27 httpServer: server,
28 autoAcceptConnections: false
29 });
30
31 function onWsConnMessage(message) {
32 if (message.type == 'utf8') {
33 console.log('Received message: ' + message.utf8Data);
34 } else if (message.type == 'binary') {
35 console.log('Received binary data.');
36 }
37 }
38
39 function onWsConnClose(reasonCode, description) {
40 console.log('Peer disconnected with reason: ' + reasonCode);
41 }
42
43 function onWsRequest(request) {
44 var connection = request.accept('echo-protocol', request.origin);
45 console.log("WebSocket connection accepted.");
46
47 // Save clients (unlimited clients)
48 clients.push(connection);
49
50 connection.on('message', onWsConnMessage);
51 connection.on('close', onWsConnClose);
52 }
53
54 wsServer.on('request', onWsRequest);
55 }
56
57 // Export functions
58 exports.start = start;
接下來的任務是製作 Frontend(Client 端);不過,現在是一個認識與學習 JSON 的絕佳時機。
Tags: