I'm learning nodejs and I want to create real time communication between flutter app and nodejs server. Both working on local.
This is my socket.js file. I'm using express and socket io. (Express for later. For Rest)
const app = require('express')()
const http = require('http').createServer(app)
app.get('/', (req, res) => {
res.send("Server is running")
})
//Socket Logic
const socketio = require('socket.io')(http)
socketio.on("connection", (userSocket) => {
console.log('a user connected');
userSocket.on("message", (data) => {
userSocket.broadcast.emit("receive_message", data)
})
})
http.listen(3000,(s)=>{
console.log("server is listening at 3000");
});
My Flutter which use socket_io_client package. When I run my app nothing happend and there is no connection between them.
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:socket_io_client/socket_io_client.dart' as IO;
String uri = 'http://localhost:3000';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key key}) : super(key: key);
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String message;
IO.Socket socket;
StreamController<String> _socketResponse;
@override
void initState() {
super.initState();
_socketResponse = StreamController();
socket = IO.io(
'http://locaost:3000',
IO.OptionBuilder()
.setTransports(['websocket']) // for Flutter or Dart VM
.setExtraHeaders({'foo': 'bar'}) // optional
.build());
socket.onConnect((data) {
print('connectend');
print(data);
socket.emit('message', 'tester');
});
socket.on('event', (data) => _socketResponse.sink.add(data));
message = 'Hello ';
}
@override
void dispose() {
_socketResponse.close();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: StreamBuilder<String>(
stream: _socketResponse.stream,
builder: (context, snapshot) {
return Center(
child: Text(snapshot.data ?? socket.connected.toString()),
);
}),
),
);
}
}
Edit: I upload my server files to Heroku and now it is working. I think there is a problem at network policy.
I found the problem. Socket-io-client is working with version 2 but my server use socketio version 3. I downgrade my version 3 to 2.