2017-05-01 25 views
15

Dưới đây là thành phần gốc phản ứng của tôi và mã nút server.js mà tôi đang cố gắng kết nối với nút phụ trợ websocket của tôi.Nút gốc và socket.io phản ứng không hoạt động

Mã phản hồi của tôi đang chạy trên cùng một máy tính với máy chủ. Tôi đã tìm thấy rất nhiều câu trả lời khác nhau ở đây, và github, không ai trong số đó tôi có thể làm việc.

Tôi cũng thấy question này mà không bao giờ được trả lời, và this question có một câu trả lời, mà tôi không thể có được làm việc (được yêu cầu hơn một năm trước)

Tôi đã tìm thấy this article và cố gắng sửa đổi mã của tôi dựa trên những hướng dẫn nhưng điều này không hiệu quả.

phản ứng đang

import React from 'react'; 
import { StyleSheet, Text, View, Image } from 'react-native'; 

const io = require('socket.io-client/socket.io'); 
let socket = io('http://localhost:3000'); 

export default class App extends React.Component { 

    constructor(props) { 
     super(props); 
     console.log(socket); 
    } 

    render() { 
     return (
      <View> 
       <Text>Websocket</Text> 
      </View> 
     ); 
    } 
} 

server.js

const express = require('express'); 
const http = require('http') 
const socketio = require('socket.io'); 

const app = express(); 
const server = http.Server(app); 
const websocket = socketio(server); 
server.listen(3000,() => console.log('listening on *:3000')); 

console.log(websocket) 

// The event will be called when a client is connected. 
websocket.on('connection', (socket) => { 
    console.log('A client just joined on', socket.id); 
}); 

Tôi đang sử dụng các phiên bản sau của gói

+0

Bài viết bạn đã liên kết đến được sử dụng 'require' thay vì' import' cho thư viện socket.io . Bạn đã thử điều đó chưa? –

+0

Câu hỏi phụ, tôi vừa sử dụng thư viện web socket tích hợp cho React Native vào cuối tuần qua lần đầu tiên. Nó có vẻ ổn nhưng đây là lần đầu tiên tôi sử dụng ổ cắm web.Thư viện socket.io mang lại lợi ích gì cho thư viện gốc? –

+0

Xem câu trả lời của tôi bên dưới. – klvs

Trả lời

-1

Cảm ơn, Peter. Theo tôi, bài viết bạn đã tìm thấy không hữu ích vì bạn đang cố gắng kết nối với máy chủ phục vụ trang. Theo ví dụ trên socket.io page, cố gắng đảm bảo rằng dòng này hoạt động: const io = require('socket.io-client/socket.io'); và kết nối mà không cần liên kết: let socket = io();

Nó làm việc cho tôi, nhưng chỉ trong trình duyệt trên cùng một máy tính. Tôi nghĩ rằng khi bạn sẽ kiểm tra trên thiết bị, bạn phải chỉ định IP của bạn thay vì localhost.

Chúc may mắn :)

5

Mã máy chủ của bạn có vẻ tốt. Mặc dù bạn nên kiểm tra xem bạn có thể kết nối với ổ cắm của nó thông qua một ứng dụng khách khác không.

Dù sao thì hãy thử điều này để có mã gốc phản ứng.

nhập theo:

import io from 'socket.io-client/socket.io'

Trong thành phần của bạn làm:

componentDidMount() { 
    const socket = io(YOURURL, { 
     transports: ['websocket'] 
    }) 

    socket.on('connect',() => { 
     console.log("socket connected") 
     socket.emit('YOUR EVENT TO SERVER', {}) 
     socket.on('EVENT YOU WANNA LISTEN', (r) => { 
     }) 
    }) 

    socket.on('connect_error', (err) => { 
     console.log(err) 
    }) 

    socket.on('disconnect',() => { 
     console.log("Disconnected Socket!") 
    }) 
    } 
+0

Tôi đã thiết lập như thế này và nó hoạt động tốt ... chỉ có sự khác biệt là tôi đang nhập khẩu như thế này 'import io from' socket.io-client ';' –

+0

Oh thật tuyệt vời khi nghe. Có thể có sự khác biệt về không gian tên tùy thuộc vào phiên bản của socket io. Đoạn mã trên nên hoạt động miễn là bạn có thể nhận được chức năng io –

+0

vận chuyển: ['websocket'] đây là một trình tiết kiệm cuộc sống cho tôi !!! Cảm ơn rất nhiều! – Pentarex

5

Tôi tin rằng nó phải được

const io = require('socket.io-client'); 

nào làm việc cho tôi.

Tôi nhớ đã gặp phải các vấn đề này khi sử dụng phản ứng gốc. Rất nhiều hướng dẫn socket.io (bao gồm cả một trang trên trang của họ) giả sử bạn đang sử dụng một kiểu cũ hơn của việc nhập JS thông qua các thẻ script trong một tài liệu HTML. Có vẻ như socket.io đã thay đổi không gian tên như tôi nhớ nó là socket.io-client/socket.io một thời gian trước đây nếu bộ nhớ phục vụ ...

+0

Tại sao nó là một yêu cầu và không phải là nhập khẩu? Tại sao lại có một sự khác biệt? – evianpring

+0

Bạn có thể sử dụng nhập nếu muốn. Sự khác biệt giữa câu trả lời của tôi và OP là 'socket.io-client' so với' socket.io-client/socket.io'. – klvs

Các vấn đề liên quan