Использование PHP и Nodejs Socket.io - PullRequest
0 голосов
/ 08 января 2019

Я использую NodeJS через порт 3001

Мой index.php:

  ...
  ...
 <div class="chat">
      <ul id="chat-ul">
        <?php foreach ($msgs as $key): ?>
          <li id="<?= $key['id'] ?>"><b><?=$key['username']?>: </b> <?=$key['message']?></li>
        <?php endforeach; ?>
      </ul>
    </div>

    <div class="chat-form">
      <div class="row">
        <div class="col-md-4">
          <button class="btn btn-success" onclick="sendMsg()" type="button" name="button">SEND</button>
        </div>
        <div class="col-md-8">
          <input type="text" name="message" id="message" class="form-control" value="">
        </div>
      </div>
    </div>


<script src="http://mywebsite:3001/socket.io/socket.io.js"></script>
<script type="text/javascript">
var socket = io.connect("http://mywebsite.com:3001");
function sendMsg() {
  socket.emit('send_message', {user:<?= $_SESSION['username']?>, id:0, message:$('#message').val()});
}
socket.on('received_message', (e)=>{
  $('#chat-ul').append(e);
});
</script>

В бэкэнде - server.js:

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

io.sockets.on('connection', (socket)=>{
  console.log('connected'); // connected

  socket.on('disconnect', ()=>{
    console.log('disconnected');
  });

  socket.on('send_message', (data)=>{
    let new_data = '<li id='+data.id+'><b>'+data.username+':</b>'+data.message+'</li>'; //connected
    io.sockets.emit('received_message', new_data); })

  });

Когда я пытаюсь запустить функцию sendMsg (), в консоле говорится:

Не удалось загрузить ресурс: net :: ERR_UNKNOWN_URL_SCHEME socket.io.js: 1

Uncaught ReferenceError: io не определен в index.php: 97

Где я делаю не так?

1 Ответ

0 голосов
/ 08 января 2019

То, как вы это делаете, очень близко к правильности.

Эта ошибка связана с тем, что ваш файл http://mywebsite:3001/socket.io/socket.io.js загружается неправильно, поэтому переменной io никогда не назначается библиотека сокета io.

Мне кажется, что вы изменили URL, чтобы не раскрывать свой домен, но я боюсь, что именно в этом проблема.

Убедитесь, что если вы вставите этот URL в браузер, он перенесет вас в файл. Похоже, что URL имеет какой-то неверный формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...