[NodeJS] NodeJs Socket Server & Socket Client
大概是寫 Socket Server 寫上癮了
這次來寫如何用 NodeJS 來製作一個簡易的 Socket Server
由於 NodeJS 是天生就是為 Web 設計的, 所以他要做出 Socket Server 是再簡單也不過了
官方手冊: http://nodejs.org/api/net.html
官方已經寫得很好了, 我順便給予一個超級簡易的範例
Socket Server
首先要使用 socket service, 要先載入 NodeJS 的 net module
那因為要 socket service 服務, 很自然的我們也要設定一下要啟動在哪個 port
而使用 net 啟動 socket server 很簡單, 用 createServer method 就可以了, 相當容易
要注意的是, 因為NodeJS 是一個 event-driven 的環境, 所以我們特別設定了兩件事情
1. 如果 client 傳資料(data), 我就用 sock.on('data', callback) 來接收跟處理資料
2. 如果 client 離開(end), 我就用 sock.on('end', callback) 來處理
而我也順便印出連上來的 client 的基本資訊(這些東西在官網的 api 說明都可以查到)
而處理 client 傳過來的資料也只是回傳回去給他而已, 沒做甚麼事情
最後就是啟動服務啦, 用 listen method 去啟動即可
作法相當容易, 且參數依據是 port, host, callback function, 這邊順便印出 server 資訊
如果今天想要架設的是 IPv6, host 參數可以改成 '::1'
IPv4
IPv6
這邊放個完整程式碼
那測試也很簡單
就可以測試看看了
Socket Server IPv4 & IPv6
這邊其實我有發現一個問題, 這個機制下我找不到可以讓 IPv4 and IPV6 共存的機制
只好手動改一下設計方法
將 createServer 後面的 function 獨立出來, 然後用參數的方式傳入 createServer, 這樣開兩個 Scoket Service 就可以了
完整程式碼如下, 這樣就可以用
or
來測試
大功告成
既然 Server 都說了, 就順道列一下 Client 的作法, 相當相當的簡單
Socket Client
使用的 module 也是 net
首先先 new 一個 Socket
然後要連線到 Server 端, 用 connect method 即可, 參數是要連線的 Port, Host, callback function
callback function 只是印出連線到的 server 跟順便傳訊息跟 server 說 hello
那如果 Server 回傳訊息要怎麼辦勒? 用 on('data', callback function) 來接收就可以了
下面程式碼會把收到的訊息(data) 印出來, 然後就自殺了XDDD (destroy)
完整程式碼如下
相當的沒有難度阿 #
註: NodeJS 是 single thread
這次來寫如何用 NodeJS 來製作一個簡易的 Socket Server
由於 NodeJS 是天生就是為 Web 設計的, 所以他要做出 Socket Server 是再簡單也不過了
官方手冊: http://nodejs.org/api/net.html
官方已經寫得很好了, 我順便給予一個超級簡易的範例
Socket Server
首先要使用 socket service, 要先載入 NodeJS 的 net module
那因為要 socket service 服務, 很自然的我們也要設定一下要啟動在哪個 port
var net = require('net'); var PORT = 19850;
而使用 net 啟動 socket server 很簡單, 用 createServer method 就可以了, 相當容易
要注意的是, 因為NodeJS 是一個 event-driven 的環境, 所以我們特別設定了兩件事情
1. 如果 client 傳資料(data), 我就用 sock.on('data', callback) 來接收跟處理資料
2. 如果 client 離開(end), 我就用 sock.on('end', callback) 來處理
而我也順便印出連上來的 client 的基本資訊(這些東西在官網的 api 說明都可以查到)
而處理 client 傳過來的資料也只是回傳回去給他而已, 沒做甚麼事情
var server = net.createServer(function(sock) { console.log('server is connected by:' + sock.remoteAddress + ':' + sock.remotePort); sock.on('data', function(data) { sock.write(data); }); sock.on('end', function() { console.log('client disconnected'); }); });
最後就是啟動服務啦, 用 listen method 去啟動即可
作法相當容易, 且參數依據是 port, host, callback function, 這邊順便印出 server 資訊
如果今天想要架設的是 IPv6, host 參數可以改成 '::1'
IPv4
server.listen(PORT, '127.0.0.1', function() { address = server.address(); console.log("opened server on %j", address); });
IPv6
server.listen(PORT, '::1', function() { address = server.address(); console.log("opened server on %j", address); });
這邊放個完整程式碼
var net = require('net'); var PORT = 19850; var server = net.createServer(function(sock) { console.log('server is connected by:' + sock.remoteAddress + ':' + sock.remotePort); // print client information sock.on('data', function(data) { sock.write(data); }); sock.on('end', function() { console.log('client disconnected'); }); }); server.listen(PORT, '127.0.0.1', function() { address = server.address(); console.log("opened server on %j", address); });
那測試也很簡單
telnet localhost 19850
就可以測試看看了
Socket Server IPv4 & IPv6
這邊其實我有發現一個問題, 這個機制下我找不到可以讓 IPv4 and IPV6 共存的機制
只好手動改一下設計方法
將 createServer 後面的 function 獨立出來, 然後用參數的方式傳入 createServer, 這樣開兩個 Scoket Service 就可以了
完整程式碼如下, 這樣就可以用
telnet localhost 19850
or
telnet ::1 19850
來測試
var net = require('net'); var PORT = 19850; var service = function(sock) { console.log('server is connected by:' + sock.remoteAddress + ':' + sock.remotePort); sock.on('data', function(data) { sock.write(data); }); sock.on('end', function() { console.log('client disconnected'); }); }; var server4 = net.createServer(service); server4.listen(PORT, '127.0.0.1', function() { address = server4.address(); console.log("opened server on %j", address); }); var server6 = net.createServer(service); server6.listen(PORT, '::1', function() { address = server6.address(); console.log("opened server on %j", address); });
大功告成
既然 Server 都說了, 就順道列一下 Client 的作法, 相當相當的簡單
Socket Client
使用的 module 也是 net
var net = require('net'); var HOST = '127.0.0.1'; var PORT = 19850;
首先先 new 一個 Socket
var client = new net.Socket();
然後要連線到 Server 端, 用 connect method 即可, 參數是要連線的 Port, Host, callback function
callback function 只是印出連線到的 server 跟順便傳訊息跟 server 說 hello
client.connect(PORT, HOST, function() { console.log('You connect to: ' + HOST + ':' + PORT); client.write('hello\r\n'); });
那如果 Server 回傳訊息要怎麼辦勒? 用 on('data', callback function) 來接收就可以了
下面程式碼會把收到的訊息(data) 印出來, 然後就自殺了XDDD (destroy)
client.on('data', function(data) { console.log('Return from server: ' + data); client.destroy(); });
完整程式碼如下
var net = require('net'); var HOST = '127.0.0.1'; var PORT = 19850; var client = new net.Socket(); client.connect(PORT, HOST, function() { console.log('You connect to: ' + HOST + ':' + PORT); client.write('hello\r\n'); }); client.on('data', function(data) { console.log('Return from server: ' + data); client.destroy(); });
相當的沒有難度阿 #
註: NodeJS 是 single thread
留言
張貼留言