首页 > 解决方案 > Socket.io 未连接 (2)

问题描述

我正在使用 Laravel,我的目录结构如下:

/example.com
    /server.js
    /node_modules
    /css
    /js
    /main/views/writemessage.blade.php
    /main/views/socket.blade.php
    /main/app/Http/Controllers/SocketController.php

我的代码server.js是:

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
io.set('origins', '*:*');
var redis = require('redis');
var cors = require('cors');
app.use(cors());

server.listen(8890);
io.on('connection', function (socket) {

  console.log("new client connected");
  var redisClient = redis.createClient();
  redisClient.subscribe('message');

  redisClient.on("message", function(channel, message) {
    console.log("mew message in queue "+ message + "channel");
    socket.emit(channel, message);
  });

  socket.on('disconnect', function() {
    console.log('Disconnected!!!');
    redisClient.quit();
  });

});

我的代码writemessage.blade.php是:

@extends('_template.default')
@section('main-content')
<script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js"></script>

<div class="container">
    <div class="row">
        <div class="col-lg-8 col-lg-offset-2" >
          <div id="messages" ></div>
        </div>
    </div>
</div>
<script>
    var socket = io.connect('https://example.com:8890', {secure: true});
    socket.on('message', function (data) {
        console.log('YES!!!!!!!!!!');
        $( "#messages" ).append( "<p>"+data+"</p>" );
      });
</script>

@endsection

我的代码socket.blade.php是:

@extends('_template.default')
@section('main-content')
    <div class="container">
        <div class="row">
            <div class="col-md-10 col-md-offset-1">
                <div class="panel panel-default">
                    <div class="panel-heading">Send message</div>
                    <form action="sendmessage" method="POST">
                        <input type="text" name="message" >
                        <input type="submit" value="send">
                        {{csrf_field()}}
                    </form>
                </div>
            </div>
        </div>
    </div>

@endsection

当我在 Windows 中时,它会返回CORS问题,但现在当我使用 Linux 时,它不会返回该错误,但不会在控制台中返回任何内容。redis 也在运行......但是当我运行node server.js它时,它甚至不会在控制台中打印 Connected 或 Disconnected 消息。我的问题出在哪里?是来自网址吗?我说 url 因为当我在 Firefox 中检查网络监视器时,我看到它在说The connection used to fetch this resource was not secure. 我做错了什么吗?还是我应该做更多的事情?如何测试问题出在哪里?

顺便说一句,我的节点版本:6.14.3 和我的 npm 版本:3.10.10

谢谢

标签: node.jslaravelwebsocketsocket.io

解决方案


推荐阅读