使用socketIO通信时,一直连不上服务端,我使用其他客户端的连接是可以的
服务端代码
// Setup basic express server
const express = require('express');
const app = express();
const path = require('path');
const server = require('http').createServer(app);
const io = require('socket.io')(server);
const port = process.env.PORT || 8081;
server.listen(port, () => {
console.log('Server listening at port %d', port);
});
// Routing
app.use(express.static(path.join(__dirname, 'public')));
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
res.header("X-Powered-By",' 3.2.1');
next();
});
app.use(function (req, res, next) {
res.set('Access-Control-Allow-Credentials', true)
res.set('Content-Type', 'text/plain; charset=UTF-8')
next()
})
// Chatroom
let numUsers = 0;
io.on('connection', (socket) => {
console.log('链接成功')
let addedUser = false;
// when the client emits 'new message', this listens and executes
socket.on('new message', (data) => {
// we tell the client to execute 'new message'
socket.broadcast.emit('new message', {
username: socket.username,
message: data
});
});
// when the client emits 'add user', this listens and executes
socket.on('add user', (username) => {
console.log(username);
if (addedUser) return;
// we store the username in the socket session for this client
socket.username = username;
++numUsers;
addedUser = true;
socket.emit('login', {
numUsers: numUsers
});
// echo globally (all clients) that a person has connected
socket.broadcast.emit('user joined', {
username: socket.username,
numUsers: numUsers
});
});
// when the client emits 'typing', we broadcast it to others
socket.on('typing', () => {
socket.broadcast.emit('typing', {
username: socket.username
});
});
// when the client emits 'stop typing', we broadcast it to others
socket.on('stop typing', () => {
socket.broadcast.emit('stop typing', {
username: socket.username
});
});
// when the user disconnects.. perform this
socket.on('disconnect', () => {
console.log('断开');
if (addedUser) {
--numUsers;
// echo globally that this client has left
socket.broadcast.emit('user left', {
username: socket.username,
numUsers: numUsers
});
}
});
});
客户端代码
import React, { Component } from 'react';
// import { StyleSheet, Text, View } from 'react-native';
import {io} from 'socket.io-client';
const socket = io("/socket"); // replace with the IP of your server, when testing on real devices
export default class App extends Component {
constructor(props: any) {
super(props);
this.state = {
connected: socket.connected,
currentTransport: socket.connected ? socket.io.engine.transport.name : '-',
lastMessage: ""
};
}
componentDidMount() {
socket.on('connect', () => this.onConnectionStateUpdate());
socket.on('disconnect', () => this.onConnectionStateUpdate());
socket.on('message', (content) => this.onMessage(content));
}
componentWillUnmount() {
socket.off('connect');
socket.off('disconnect');
socket.off('message');
}
onConnectionStateUpdate() {
console.log('12312312312312321');
this.setState({
connected: socket.connected,
currentTransport: socket.connected ? socket.io.engine.transport.name : '-'
});
if (socket.connected) {
socket.io.engine.on('upgrade', () => this.onUpgrade());
} else {
socket.io.engine.off('upgrade');
}
}
onMessage(content: any) {
this.setState({
lastMessage: content
});
}
onUpgrade() {
this.setState({
currentTransport: socket.io.engine.transport.name
});
}
render() {
return (
<p style={styles.container}>
{/* <p>State: { this.state.connected ? 'Connected' : 'Disconnected' }</p>
<p>Current transport: { this.state.currentTransport }</p>
<p>Last message: { this.state.lastMessage }</p> */}
</p>
);
}
}
const styles = {
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
};
这个客户端代码是从成功连接的地方拷贝过来的,但是在这个项目中还是无法连接,在network中的请求中发现response的connection为close,并且network中的ws返回WebSocket is closed before the connection is established,令我很不解的是同一个服务端的代码,并且前端代码也是一样的为什么连接不上,劳烦各位帮帮忙,看看问题出在哪里