我的客户端 socket.io 在哪里?

Where is my client side socket.io?

我使用 Express 和 React-Engine 创建了一个同构的 React 应用程序。现在我正在尝试连接 socket.io。在快速设置中,我有

var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
...
app.set('views', __dirname + '/public/views');

app.get('/', function(req, res) {
  res.render(req.url, {
    title: 'React Engine Express Sample App',
    name: 'something'
  });
});
...
var server = app.listen(3000);

io.on('connection', function (socket) {
  socket.on('logIn', function (data) {
      console.log(data);     
  });
});

前端我有一个React组件Layout

var React = require('react');
var socket;

module.exports = React.createClass({
    componentDidMount: function () {       
        socket = io();        
    },
    clicked: function () {
        socket.emit('logIn', {name: "Dan"});    
        console.log("clicked");
    },
    render: function render() {
        return (
          <html>
            <body>
              {this.props.children}
              <button onClick={this.clicked}>click me</button>
              <script src="/socket.io/socket.io.js"></script>
            <script src='/bundle.js'></script>
            </body>            
          </html>
        );
    }
});

项目结构是

index.js(express app)
package.json
/public
    bundle.js(generated by webpack)
    index.js(front-end routing setup)
    routes.jsx
    /views
        app.jsx
        layout.jsx(where the front end really starts)

从我所看到的一切来看,应该可行。 Express 应用程序应托管 socket.io 文件,以便我可以在前端获取它。尽管如此,这和 localhost:3000/socket.io/socket.io.js 都没有用。我什至尝试了一些不同的相对路径。我怎样才能找到我的客户端 socket.io 文件?

我使用的有效序列是这样的:

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

我不确定你的哪一方面可能导致了问题,但它与此不同,特别是在你如何设置服务器方面(你为你的 server 变量分配了两个不同的值似乎不对)以及如何初始化 socket.io.

此外,我看到一些人在服务器端安装了 socket.io 的客户端版本,而不是服务器版本,这显然不会让您能够为 /socket 提供服务。io/socket.io.js 文件,因此值得检查。