io.emit работает нормально, socket.emit не работает в приложениях чата socket.io и node.js - PullRequest
0 голосов
/ 05 июня 2019

Я установил очень простое приложение чата, используя node.js и socket.io. Все работает нормально, когда сервер передает через io.emit (клиенты получают данные), но при переключении на socket.emit исходный клиент не получает никаких данных. Я использую CodeIgniter для фреймворка и использую форму для отправки данных в БД MySQL, что также хорошо работает. Единственная проблема заключается в том, что socket.emit не работает должным образом. Ниже мой код:

Я уже пробовал все возможные функции emit, предоставляемые в документации к socket.io, и просмотрел все связанные страницы на SO, но ничего не работает. Я также переустановил socket.io на своем сервере Ubuntu, но ничего не меняется

//Server.js code:

var fs = require('fs');
var app = require('express')();
var options = {key: fs.readFileSync('/etc/ssl/private/private.pem'),     cert: fs.readFileSync('/etc/ssl/certs/public.pem')};
var server = require('https').Server(options, app);
var io = require('socket.io').listen(server);

server.listen(3000, function () {
console.log("service running on port 3000");
});

io.sockets.on('connect', function (socket) {
    console.log('client id '+socket.id+' connected');

    socket.on('join', function (data) {
        var room_no = 'room'+data.room;
        socket.join(room_no);
        console.log('joined room no.:', data.room);
    });

    socket.on('disconnect', function(){
        console.log("client "+socket.id+" disconnected");
    });

    socket.on('send message', function(post) {
        socket.emit('privatemsg', post);
        console.log('sending message "'+post.message+'"     to:'+socket.id);
    });
    socket.on('error', function (err) {
    console.log(err);
});

});

//Client code (codeigniter):
<?php
$this->load->view('templates/headers/main_header', $title);
?>
<div class="container">
    <div class="row">
        <div class="pull-left">
            <h3><?php echo $page->title; ?></h3>
        </div>
    </div>
 <?php echo form_open('user/sendmsg', array            ('name'=>'message','method'=>'post')); ?>

<div class="container">
    <div class="col-md-3">
     <p>
      <input type="text" placeholder="Type Here..." class="form-control"     size="20px" id="message" name="message" />
     </p>
      <input type="hidden" id="conversation_id" name="conversation_id"     value="1" />
    </div>
    <div class="col-md-3">
     <input type="button"class="btn btn-    primary"id="send"name="send"value="Send"/>
    </div>
    <div class="col-md-3"></div>
    <div class="col-md-3"></div>
     <table class="table">
      <thead>
        <tr>
         <th>Date</th>
         <th>From</th>
         <th>Message</th>
        </tr>
      </thead>
      <tbody id="message-tbody">
        <?php foreach($allMsgs as $row) { ?>
         <tr><td><?php echo $row['msgtime']; ?></td><td><?php echo $row    ['user2']; ?></td><td><?php echo $row['message']; ?></td></tr>
        <?php } ?>
      </tbody>
     </table>
</div>

<?php echo form_close();?>

<script src="<?php echo base_url('js/jquery-3.3.1.min.js');?>"></script>
<script src="<?php echo base_url('chatjs/node_modules/socket.io-    client/dist/socket.io.js');?>"></script>
<script>
    $(document).ready(function(){
    $(document).on("click","#send",function() {
    var dataString = {
    message : $("#message").val(),     conversation_id:$("#conversation_id").val()
    };

$.ajax({
type: "POST",
url: "<?php echo base_url('user/sendmsg');?>",
data: dataString,
dataType: "json",
cache : false,
success: function(data){
    if(data.success ==true){
    console.log("data:"+JSON.stringify(data));
    var socket = io.connect    ( 'https://'+window.location.hostname+':3000' );
    socket.emit('send message', {
     message: data.message,
     date: data.date,
     user2: data.user2
    });
    console.log("socket msg sent")
    }
} ,error: function(xhr, status, error) {
console.log(error);
},
});
});
});
var socket = io.connect( 'https://'+window.location.hostname+':3000',     {secure: true});
socket.on('connect', function(socket) {
    console.log('client connected');
});
socket.on('error', function (err) {
    console.log(err);
});
socket.on('privatemsg', function(msg) {
    console.log("data received:"+JSON.stringify(msg));
    $("#message-tbody").prepend    ('<tr><td>'+msg.date+'</td><td>'+msg.user2+'</td><td>'+msg.message+'</td></tr    >');
});

</script>
 </div>
<?php
$this->load->view('templates/footers/main_footer');
?>


//node.js console.log:
// root@localhost:/var/www/html/chatjs# node server.js
// service running on port 3000
// client id nK5BmZwg0mQQWzv6AAAA connected
// client id qpKyI2WTRXL60EoqAAAB connected
// sending message "test444" to:qpKyI2WTRXL60EoqAAAB$


//Client (Chrome) console.log:
// ial.js:3219 registerEventsMessage called 
// ial.js:4459 ready: before call parse for last time > Object
// client connected
// uchat:240 msg:{"message":"test444","conversation_id":"1"}
// uchat:250 data:    {"message":"test444","conversation_id":"1","date":"2019-06-05     10:10:10","user1":2,"user2":3,"status":1,"success":true}
    // uchat:257 socket msg sent
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...