2012-08-03 124 views
2

我的目標:創建將在兩個Web瀏覽器之間發送antyhing(事件,字符串,函數調用)的node.js服務器和客戶端應用程序。Node.js,socket.io,require()

我安裝並創建了簡單的服務器,但問題始於創建客戶端。截至http://socket.io/說我被命令安裝它:

npm install socket.io

但在基本的例子所需要的文件:

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

沒有下載或安裝。在/node_modules/socket.id/lib中有類似的文件,但它是相同的文件嗎?我認爲這是socket.io客戶端,但作爲服務器模塊,而不是爲瀏覽器JavaScript的權利?

如何獲得socket.io.js只是工作,並且可以連接到node.js服務器,沒有像io/socket/require這樣的錯誤未定義等?

我不想創建響應正常http請求的web serwer。我想服務器,將持有連接,並且能夠在兩個瀏覽器

我受得了JS腳本之間的溝通,大家寫的像大家對世界形式的node.js在socket.io.js文件每一個可能direcortory。可能的重複:

socket.io.js not found

開始於一個函數調用require(),在乾淨的JavaScript API是沒有的。所以我甚至不嘗試這種溶劑。任何人都可以解釋如何正確包含和定義io。*嗎?這是關於Express框架的東西?爲什麼node.js和socket.id頁面沒有提到明確的要求?

問題是,我需要一個CLIENT js庫,並且我不是指「客戶機在服務器上」,我的節點二進制服務器將能夠連接到其他頁面/服務器並進行通信。我的意思是客戶端在HTML客戶端頁面。而且,如果需要的話,其他實時JS。

我一把抓起一個演示示例AT http://serv1.aelag.com:8084/

/** Socket.IO 0.6.2 - Built with build.js */ 
/** 
* Socket.IO client 
* 
* @author Guillermo Rauch <[email protected]> 
* @license The MIT license. 
* @copyright Copyright (c) 2010 LearnBoost <[email protected]> 
*/ 

this.io = { 
    version: '0.6.2', 
... 

如何獲得正常方式文件,而不是從其他服務器(可能是不穩定的或舊版本)偷?我需要獲得該文件。有沒有依賴關係?我應該通過構建「build.js」還是開發人員來創建它?

+0

可能重複http://stackoverflow.com/questions/10191048/socket-io-js-not-found – 2012-08-03 12:44:08

回答

2

您確實需要在任何地方添加/socket.io/socket.io.js。如果你已經通過npm install socket.io安裝了socket.io,你的應用程序就知道如何處理它。幾個月前,我玩socket.io,這是一個非常簡單的「聊天」,我想到了它並且工作。所以它可能會幫助你! (我使用的ExpressJS一個非常有用的Node.js框架BTW)

這是你的服務器端應用程序:

var app = require('express').createServer(); 
var io = require('socket.io').listen(app); 

app.listen(3000); 

app.get('/', function (req, res) { 
    res.sendfile(__dirname + '/index.html'); 
}); 

io.sockets.on('connection', function (socket) { 
    socket.on('news', function (data) { 
     socket.emit('news', { content: data.text }); 
     socket.broadcast.emit('news', { content: data.text}); 
    }); 
}); 

這是你的指數。HTML

<!DOCTYPE html> 
<html> 
<head> 
<title>socket test</title> 
</head> 
<body> 
<input type="text" id="Username"> <input type="text" id="Content"><input type="button" value="send" onclick="sendMessage()"><br /> 
<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost:3000/pathtoproject'); 
    socket.on('news', function (data) { 
    document.body.innerHTML += data.content + "<br />"; 
    }); 
    function sendMessage() { 
     socket.emit('news', { text: document.getElementById('Username').value + ": " + document.getElementById('Content').value }); 
    } 
</script> 
</body> 
</html> 
+0

並再次:)你有''在客戶端html頁面的HEAD部分。這與'npm install socket.io'沒有任何關係很明顯,如果我得到你的index.html並放到web服務器上,當瀏覽器請求'http:// site ...時會有404響應代碼。 ..com/socket.io/socket.io.js',因爲你確實需要將JS文件放在web serwer路徑中以將其包含在頭部並且具有「io」DEFINED。 – 2012-08-03 13:11:31

+0

當然,你必須在你的html文件中包含''這行。我的意思是你需要創建一個名爲'socket.io'的文件夾和一個名爲'socket.io.js'的文件位於同一個文件夾中。你的應用程序將處理這個。 – Amberlamps 2012-08-03 14:04:03

+0

我會接受,因爲誤解。 – 2012-08-06 12:56:56

3

我終於解決了這個

的socket.io腳本不存在的平面文件。它是由node.js服務器生成並提供給瀏覽器的。所以。包括它的:

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

只有Node.js的服務器啓動相同的端口與Web應用程序的服務器上

作品。如果試圖在端口80從例如Apache的加載這個腳本,你需要把整個路徑的node.js服務器偵聽主機:

<script src="http://localhost:8080/socket.io/socket.io.js"></script>

+0

這對我有用。這實際上是正確的答案。 – Dominique 2014-04-05 21:07:18

0

我設法socket.io裝上客戶端像這樣:

jQuery.getScript("bower_components/socket.io/lib/socket.js", function() { 
    var socket = io.connect('http://localhost'); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
});