2016-04-09 11 views
0

私はので、私は動的にサイト上のデータを更新することができioのソケットを使用しようとしています:ソケットIO例

編集:app.jsで更新されたコード

:インデックスで

var express = require('express'); 
var app = express(); 

var routes = require('./routes/index'); 
app.use('/', routes); 

var server = require('http').createServer(app); 
var io = require('socket.io')(server); 

    io.on('connection', function(socket){ 
    socket.emit('news', {hello: 'world'}); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

server.listen(app.get('port'), function(){ 
    console.log('Express listening on port ' + app.get('port')); 
}); 

を。 ejs:

<script src="/socket.io/socket.io.js"></script> 
<script> 
var socket = io.connect('http://localhost:80'); 
socket.on('news', function(data) { 
    socket.emit('my other event', {my: 'data'}); 
}); 
</script> 

ページは正しく読み込まれますが、socketioスクリプトは何も行いません。コードをできるだけシンプルにしようとしました。

Expressは、ポート80の出力をコンソールでうまく受信しています。

(www。

#!/usr/bin/env node 

/** 
* Module dependencies. 
*/ 

var app = require('../app'); 
var debug = require('debug')('untitled:server'); 
var http = require('http'); 

/** 
* Get port from environment and store in Express. 
*/ 

var port = normalizePort(process.env.PORT || '3000'); 
app.set('port', port); 

/** 
* Create HTTP server. 
*/ 

var server = require('http').Server(app); 

//var io = require('socket.io')(server); 

/** 
* Listen on provided port, on all network interfaces. 
*/ 

server.listen(port); 
server.on('error', onError); 
server.on('listening', onListening); 

/** 
* Normalize a port into a number, string, or false. 
*/ 

function normalizePort(val) { 
    var port = parseInt(val, 10); 

    if (isNaN(port)) { 
    // named pipe 
    return val; 
    } 

    if (port >= 0) { 
    // port number 
    return port; 
    } 

    return false; 
} 

/** 
* Event listener for HTTP server "error" event. 
*/ 

function onError(error) { 
    if (error.syscall !== 'listen') { 
    throw error; 
    } 

    var bind = typeof port === 'string' 
    ? 'Pipe ' + port 
    : 'Port ' + port; 

    // handle specific listen errors with friendly messages 
    switch (error.code) { 
    case 'EACCES': 
     console.error(bind + ' requires elevated privileges'); 
     process.exit(1); 
     break; 
    case 'EADDRINUSE': 
     console.error(bind + ' is already in use'); 
     process.exit(1); 
     break; 
    default: 
     throw error; 
    } 
} 

/** 
* Event listener for HTTP server "listening" event. 
*/ 

function onListening() { 
    var addr = server.address(); 
    var bind = typeof addr === 'string' 
    ? 'pipe ' + addr 
    : 'port ' + addr.port; 
    debug('Listening on ' + bind); 
} 

答えて

2

クライアント側で実際に何もしていないので、「ソケットスクリプトは何もしません」という意味ではわかりません!とにかく投稿されたコードから。

EDIT:

このコードは、クライアントとサーバー上の私のために動作します。あなたはまた、手動でsocket.io-clientパッケージを提供する自分を試すことができます

server.js

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

app.set('view engine', 'jade'); 
app.set('views', './views'); 

app.get('/', function (req, res) { 
    res.render('index'); 
}); 

io.on('connection', function (socket) { 
    console.log('connected via server'); 
}); 

http.listen(3000, function() { 
    console.log('app listening on port 3000'); 
}); 

index.jade(あなたがEJSまたはHTMLを使用することができます)

html 
    head 
     script(src="/socket.io/socket.io.js") 
     script. 
      var socket = io.connect(); 
      socket.on('connect', function() { 
       console.log('greetings from client'); 
      }); 
    body 
     h1 hello world 

+0

のためのいくつかの変更をしなければなりませんでした。基本的には何もしません(クライアントからの挨拶はしません)。 – user1212520

+0

奇妙な..あなたはサーバーからイベントを発信しようとしましたが、クライアントでそれをキャッチしましたか? – fzxt

+0

元のコード – user1212520

2

app.get('port')が正しく動作し、静的サイトをどのように提供するかを確認してください。

私は明示的に設定しようと動作します:

app.js

var express = require('express');                     
var app = express(); 

app.set('view engine', 'ejs'); 
app.set('views', './views'); 

app.get('/', function (req, res) { 
    res.render('index'); 
}); 

var server = require('http').createServer(app); 
var io = require('socket.io')(server); 

io.on('connection', function(socket){ 
    socket.emit('news', {hello: 'world'}); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

server.listen(3100, function(){ 
    console.log('Express listening on port ' + 3100); 
}); 

index.ejs

<script src="/socket.io/socket.io.js"></script> 
<script> 
var socket = io.connect('http://localhost:3100'); 
socket.on('news', function(data) { 
    socket.emit('my other event', {my: 'data'}); 
}); 
</script> 

または静的サイトが他の場所でホストされている場合<script src="http://localhost:3100/socket.io/socket.io.js"></script>を使用します。

+0

私のホームページはポート80にあります。使用するポートはわかりません。もし私がapp.get( 'port')を使用すると80を出力しますが、手動で80を入力すると、すでに使用中であるというエラーが表示されます。私はそれがwwwファイルと関係があるかどうかわからないのですか? – user1212520