2016-09-22 95 views
0

嘿,我是套接字和節點的新手,並且正在使用socket.io進行聊天。Socket.io集成節點

這裏是我的index.js文件:

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

app.get('/', function(req, res) { 
    //route handler serve index.html file 
    res.sendFile(__dirname + '/index.html'); 
}); 

io.on('connection', function(socket) { 
    console.log('A user has connected'); 
    socket.on('disconnect', function() { 
     console.log("A user has disconnected"); 
    }) 
}) 

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

**這是我的index.html:**

<html> 
<head> 
    <title> Chat </title> 
    <script src="https://cdn.socket.io/socket.io-1.0.0.js"></script> 
    <script> 
     var socket = io(); 
    </script> 
</head> 
<body> 
    <ul id="messages"></ul> 
    <form action=""> 
     <input id="m" autocomplete="off"/> <button> Send </button> 
    </form> 
</body> 

我總是收到引用錯誤說法該io未被定義。我試圖鏈接套接字作爲一個CDN和作爲我的服務器網址。

+1

在服務器上也需要socket.io。嘗試安裝socket-io並添加以下代碼:var io = require('socket.io')(app);'''。 –

+0

@HimaniAgrawal謝謝,這工作! – rxa

回答

1

你需要下載並在服務器端初始化socket.io:

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

// add this line 
var io = require('socket.io')(http); 

這會將socket.io模塊,您的Web服務器註冊的,以便它可以掛接到它,然後宣佈和轉讓io變量。

P.S.你的客戶端連接到socket.io 1.0.0,這是一個非常舊的版本。你或許應該讓服務於客戶socket.io您socket.io服務器處理通過改變你的客戶端腳本代碼到這一點:

<script src="/socket.io/socket.io.js"></script> 

這將自動成爲客戶端socket.io的匹配版本,那就是你的服務器上(所以它們將始終與同一版本同步)。這是有效的,因爲require('socket.io')(app)所做的一件事是註冊/socket.io/socket.io.js的路由處理程序。

+0

var io = require('socket.io')(http);爲我做了詭計,謝謝!所以基本上我需要在客戶端和服務器端引用它? – rxa

+0

@rxa - 好的,你必須在客戶端和服務器端初始化socket.io。 – jfriend00