LoginSignup
20
20

More than 5 years have passed since last update.

node+socket.io+expressでサーバーとWebページ間で通信するためのスニペット

Last updated at Posted at 2016-02-18

この記事は、ほぼsocket.ioのページのGet Started: Chat applicationの流用です。
よく使うのでメモ。

前提

nodeとnpmのインストールが済んでいること。

ディレクトリ構成

.
|-- index.html
|-- index.js
|-- node_modules
|-- package.json

サーバー側の準備

mkdir server&&cd $_
npm init
npm install express --save
npm install socket.io --save

HTTPおよびWebSocketサーバー

index.js
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);

// index.htmlから読み込まれている静的ファイルを送れるようにしておく
app.use(express.static(__dirname));

// GETされたらindex.htmlを送信する
app.get('/', function(req, res){
  res.sendfile('index.html');
});

// クライアントからの接続を待つ
io.on('connection', function(socket){
  console.log('a user connected');
  socket.on('disconnect', function(){
    console.log('user disconnected');
  });
  // クライアントからメッセージを受け取ったら投げ返す
  socket.on('chat message', function(msg){
    // 同じクライアントに送信する場合は socket.emit を io.emit に変える
    socket.emit('chat message', msg);
  });
});

// サーバーをポート3000番で起動
http.listen(3000, function(){
  console.log('listening on *:3000');
});

クライアント側HTML

index.html
<!doctype html>
<html>
  <head>
    <title>Socket.IO chat</title>
    <style>
      * { margin: 0; padding: 0; box-sizing: border-box; }
      body { font: 13px Helvetica, Arial; }
      form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }
      form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; }
      form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; }
      #messages { list-style-type: none; margin: 0; padding: 0; }
      #messages li { padding: 5px 10px; }
      #messages li:nth-child(odd) { background: #eee; }
    </style>
  </head>
  <body>
    <ul id="messages"></ul>
    <form action="">
      <input id="m" autocomplete="off" /><button>Send</button>
    </form>

<!-- socket.ioをロードする -->
<script src="/socket.io/socket.io.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>

<script>
  var socket = io();
  $('form').submit(function(){
    // メッセージを送信する
    socket.emit('chat message', $('#m').val());
    $('#m').val('');
    return false;
  });
  // メッセージを受信する
  socket.on('chat message', function(msg){
    $('#messages').append($('<li>').text(msg));
  });
</script>

  </body>
</html>

実行する

ターミナルでnode index.jsを実行して、ブラウザで http://上記サーバのIPアドレス:3000を開く。

20
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
20