socket_io_client

Creator: coderz1093

Last updated:

Add to Cart

Description:

socket io client

socket.io-client-dart #
Port of awesome JavaScript Node.js library - Socket.io-client v2.0.1~v3.0.3 - in Dart
Version info: #



socket.io-client-dart
Socket.io Server




v0.9.* ~ v1.*
v2.*


v2.*
v3.* & v4.*



Usage #
Dart Server
import 'package:socket_io/socket_io.dart';

main() {
// Dart server
var io = Server();
var nsp = io.of('/some');
nsp.on('connection', (client) {
print('connection /some');
client.on('msg', (data) {
print('data from /some => $data');
client.emit('fromServer', "ok 2");
});
});
io.on('connection', (client) {
print('connection default namespace');
client.on('msg', (data) {
print('data from default => $data');
client.emit('fromServer', "ok");
});
});
io.listen(3000);
}
copied to clipboard
Dart Client

import 'package:socket_io_client/socket_io_client.dart' as IO;

main() {
// Dart client
IO.Socket socket = IO.io('http://localhost:3000');
socket.onConnect((_) {
print('connect');
socket.emit('msg', 'test');
});
socket.on('event', (data) => print(data));
socket.onDisconnect((_) => print('disconnect'));
socket.on('fromServer', (_) => print(_));
}
copied to clipboard
Connect manually #
To connect the socket manually, set the option autoConnect: false and call .connect().
For example,
Socket socket = io('http://localhost:3000',
OptionBuilder()
.setTransports(['websocket']) // for Flutter or Dart VM
.disableAutoConnect() // disable auto-connection
.setExtraHeaders({'foo': 'bar'}) // optional
.build()
);
socket.connect();
copied to clipboard
Note that .connect() should not be called if autoConnect: true
(by default, it's enabled to true), as this will cause all event handlers to get registered/fired twice. See Issue #33.
Update the extra headers #
Socket socket = ... // Create socket.
socket.io.options['extraHeaders'] = {'foo': 'bar'}; // Update the extra headers.
socket.io..disconnect()..connect(); // Reconnect the socket manually.
copied to clipboard
Emit with acknowledgement #
Socket socket = ... // Create socket.
socket.onConnect((_) {
print('connect');
socket.emitWithAck('msg', 'init', ack: (data) {
print('ack $data') ;
if (data != null) {
print('from server $data');
} else {
print("Null") ;
}
});
});
copied to clipboard
Socket connection events #
These events can be listened on.
const List EVENTS = [
'connect',
'connect_error',
'connect_timeout',
'connecting',
'disconnect',
'error',
'reconnect',
'reconnect_attempt',
'reconnect_failed',
'reconnect_error',
'reconnecting',
'ping',
'pong'
];

// Replace 'onConnect' with any of the above events.
socket.onConnect((_) {
print('connect');
});
copied to clipboard
Acknowledge with the socket server that an event has been received. #
socket.on('eventName', (data) {
final dataList = data as List;
final ack = dataList.last as Function;
ack(null);
});
copied to clipboard
Usage (Flutter) #
In Flutter env. not (Flutter Web env.) it only works with dart:io websocket,
not with dart:html websocket or Ajax (XHR), so in this case
you have to add setTransports(['websocket']) when creates the socket instance.
For example,
IO.Socket socket = IO.io('http://localhost:3000',
OptionBuilder()
.setTransports(['websocket']) // for Flutter or Dart VM
.setExtraHeaders({'foo': 'bar'}) // optional
.build());
copied to clipboard
Usage with stream and streambuilder in Flutter #
import 'dart:async';


// STEP1: Stream setup
class StreamSocket{
final _socketResponse= StreamController<String>();

void Function(String) get addResponse => _socketResponse.sink.add;

Stream<String> get getResponse => _socketResponse.stream;

void dispose(){
_socketResponse.close();
}
}

StreamSocket streamSocket =StreamSocket();

//STEP2: Add this function in main function in main.dart file and add incoming data to the stream
void connectAndListen(){
IO.Socket socket = IO.io('http://localhost:3000',
OptionBuilder()
.setTransports(['websocket']).build());

socket.onConnect((_) {
print('connect');
socket.emit('msg', 'test');
});

//When an event recieved from server, data is added to the stream
socket.on('event', (data) => streamSocket.addResponse);
socket.onDisconnect((_) => print('disconnect'));

}

//Step3: Build widgets with streambuilder

class BuildWithSocketStream extends StatelessWidget {
const BuildWithSocketStream({Key key}) : super(key: key);

@override
Widget build(BuildContext context) {
return Container(
child: StreamBuilder(
stream: streamSocket.getResponse ,
builder: (BuildContext context, AsyncSnapshot<String> snapshot){
return Container(
child: snapshot.data,
);
},
),
);
}
}

copied to clipboard
Troubleshooting #
Cannot connect "https" server or self-signed certificate server #

Refer to https://github.com/dart-lang/sdk/issues/34284 issue.
The workround is to use the following code provided by @lehno on #84

class MyHttpOverrides extends HttpOverrides {
@override
HttpClient createHttpClient(SecurityContext? context) {
return super.createHttpClient(context)
..badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
}
}

void main() {
HttpOverrides.global = MyHttpOverrides();
runApp(MyApp());
}
copied to clipboard
Memory leak issues in iOS when closing socket. #

Refer to https://github.com/rikulo/socket.io-client-dart/issues/108 issue.
Please use socket.dispose() instead of socket.close() or socket.disconnect() to solve the memory leak issue on iOS.

Connect_error on MacOS with SocketException: Connection failed #

Refer to https://github.com/flutter/flutter/issues/47606#issuecomment-568522318 issue.

By adding the following key into the to file *.entitlements under directory macos/Runner/
<key>com.apple.security.network.client</key>
<true/>
copied to clipboard
For more details, please take a look at https://flutter.dev/desktop#setting-up-entitlements
Can't connect socket server on Flutter with Insecure HTTP connection #

Refer to https://flutter.dev/docs/release/breaking-changes/network-policy-ios-android

The HTTP connections are disabled by default on iOS and Android, so here is a workaround to this issue,
which mentioned on stack overflow
Notes to Contributors #
Fork socket.io-client-dart #
If you'd like to contribute back to the core, you can fork this repository and send us a pull request, when it is ready.
If you are new to Git or GitHub, please read this guide first.
Who Uses #

Quire - a simple, collaborative, multi-level task management tool.
KEIKAI - a web spreadsheet for Big Data.

Socket.io Dart Server #

socket.io-dart

Contributors #

Thanks @felangel for https://github.com/rikulo/socket.io-client-dart/issues/7
Thanks @Oskang09 for https://github.com/rikulo/socket.io-client-dart/issues/21
Thanks @bruce3x for https://github.com/rikulo/socket.io-client-dart/issues/25
Thanks @Kavantix for https://github.com/rikulo/socket.io-client-dart/issues/26
Thanks @luandnguyen for https://github.com/rikulo/socket.io-client-dart/issues/59
Thanks @jorgefspereira for https://github.com/rikulo/socket.io-client-dart/pull/177
Thanks @fzyzcjy for https://github.com/rikulo/socket.io-client-dart/pull/188
Thanks @darwin-morocho for https://github.com/rikulo/socket.io-client-dart/pull/189
Thanks @chatziko for https://github.com/rikulo/socket.io-client-dart/pull/237
Thanks @Astray-git for https://github.com/rikulo/socket.io-client-dart/pull/313
Thanks @Astray-git for https://github.com/rikulo/socket.io-client-dart/pull/310
Thanks @Frank3K for https://github.com/rikulo/socket.io-client-dart/pull/338

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.