node.jsのWebSocketを利用する

node.jsのWebSocketを構築する方法です。
WebSocketを利用することで、リアルタイムな相互通信をすることが可能となります。
例えば、チャットなどがいい例かと思います。
※ソースは最低限の処理を記述しています。

<h2>node.jsのwebsocketをインストールする</h2>
※npmのインストールについては省略します
<pre class=”lang:default decode:true ” >npm install websocket
</pre>

<h2>WebSocketのサーバー側のソース</h2>
<pre class=”lang:js decode:true ” >var WebSocketServer = require(‘websocket’).server;
var http = require(‘http’);
var connectionClient;
// Socketサーバー
var server = http.createServer(function(request, response) {
// サーバー接続リクエスト処理
response.writeHead(200);
response.end();
});

// ポート番号指定
server.listen(3000, function() {
console.log((new Date()) + ‘ Server is listening on port 3000’);
});

var wsServer = new WebSocketServer({
httpServer: server,
autoAcceptConnections: false
});

// リクエス/トレスポンス処理
wsServer.on(‘request’, function(request) {
try
{
console.log(“request:”+request.requestedProtocols);
var connection = request.accept(‘echo-protocol’, request.origin);
connectionClient = connection;
// send()処理
connection.on(‘message’, function(message) {
connection.sendUTF(message.utf8Data);
});

connection.on(‘close’, function(reasonCode, description) {
console.log((new Date()) + ‘ close ‘ + connection.remoteAddress + ‘ disconnected.:’+description);
});
}
catch( e )
{
console.log(‘error:’+e.message);
}
});
</pre>

<h3>サーバーの構築</h3>
http.createServerでサーバーの起動を行っています。
apacheなどのWEBサーバーと併用するならば、80ポート以外を利用するといいでしょう。
<pre class=”lang:default decode:true ” >var server = http.createServer(function(request, response) {
connectionClient.sendUTF(JSON.stringify({‘type’:’msg’, ‘msg’:uri[2]}));
// サーバー接続リクエスト処理
response.writeHead(200);
response.end();
});
// ポート番号指定
server.listen(3000, function() {
console.log((new Date()) + ‘ Server is listening on port 3000’);
});
</pre>

<h3>クライアントかへのメッセージの送信</h3>

<pre class=”lang:default decode:true ” >var wsServer = new WebSocketServer({
httpServer: server,
autoAcceptConnections: false
});

// リクエス/トレスポンス処理
wsServer.on(‘request’, function(request) {
try
{
console.log(“request:”+request.requestedProtocols);
connectionClient = request.accept(‘echo-protocol’, request.origin);
// send()処理
connection.on(‘message’, function(message) {
connection.sendUTF(message.utf8Data);
});

connection.on(‘close’, function(reasonCode, description) {
console.log((new Date()) + ‘ close ‘ + connection.remoteAddress + ‘ disconnected.:’+description);
});
}
catch( e )
{
console.log(‘error:’+e.message);
}
});
</pre>

 

<h2>WebSocketのクライアント側</h2>

<pre class=”lang:default decode:true ” >var ws = new WebSocket(‘ws://サーバーURL:3000’, [“echo-protocol”,”page”]);
// WebSocketサーバーとの接続エラー
ws.onerror = function(e) {
console.log(“onerror:”+e);
};
// WebSocketサーバーとの接続完了
ws.onopen = function() {
console.log(“open”);
// メッセージの送信
ws.send(‘テスト’);
};
// メッセージの受取
ws.onmessage = function(event){
json_message = JSON.parse(event.data);
};
</pre>

「ws.send(‘テスト’);」で、サーバーへメッセージを渡しています。
「ws.onmessage」で、サーバーからのメッセージを取得しています。

そのうち、チャットを構築して、ソースを公開するかもしれません。

あわせて読みたい

コメントを残す

Translate »
%d人のブロガーが「いいね」をつけました。