# Socket
[![Build Status](https://travis-ci.org/reactphp/socket.svg?branch=master)](https://travis-ci.org/reactphp/socket)
Async, streaming plaintext TCP/IP and secure TLS socket server and client
connections for [ReactPHP](https://reactphp.org/).
The socket library provides re-usable interfaces for a socket-layer
server and client based on the [`EventLoop`](https://github.com/reactphp/event-loop)
and [`Stream`](https://github.com/reactphp/stream) components.
Its server component allows you to build networking servers that accept incoming
connections from networking clients (such as an HTTP server).
Its client component allows you to build networking clients that establish
outgoing connections to networking servers (such as an HTTP or database client).
This library provides async, streaming means for all of this, so you can
handle multiple concurrent connections without blocking.
**Table of Contents**
* [Quickstart example](#quickstart-example)
* [Connection usage](#connection-usage)
* [ConnectionInterface](#connectioninterface)
* [getRemoteAddress()](#getremoteaddress)
* [getLocalAddress()](#getlocaladdress)
* [Server usage](#server-usage)
* [ServerInterface](#serverinterface)
* [connection event](#connection-event)
* [error event](#error-event)
* [getAddress()](#getaddress)
* [pause()](#pause)
* [resume()](#resume)
* [close()](#close)
* [Server](#server)
* [Advanced server usage](#advanced-server-usage)
* [TcpServer](#tcpserver)
* [SecureServer](#secureserver)
* [UnixServer](#unixserver)
* [LimitingServer](#limitingserver)
* [getConnections()](#getconnections)
* [Client usage](#client-usage)
* [ConnectorInterface](#connectorinterface)
* [connect()](#connect)
* [Connector](#connector)
* [Advanced client usage](#advanced-client-usage)
* [TcpConnector](#tcpconnector)
* [DnsConnector](#dnsconnector)
* [SecureConnector](#secureconnector)
* [TimeoutConnector](#timeoutconnector)
* [UnixConnector](#unixconnector)
* [FixUriConnector](#fixeduriconnector)
* [Install](#install)
* [Tests](#tests)
* [License](#license)
## Quickstart example
Here is a server that closes the connection if you send it anything:
```php
$loop = React\EventLoop\Factory::create();
$socket = new React\Socket\Server('127.0.0.1:8080', $loop);
$socket->on('connection', function (React\Socket\ConnectionInterface $connection) {
$connection->write("Hello " . $connection->getRemoteAddress() . "!\n");
$connection->write("Welcome to this amazing server!\n");
$connection->write("Here's a tip: don't say anything.\n");
$connection->on('data', function ($data) use ($connection) {
$connection->close();
});
});
$loop->run();
```
See also the [examples](examples).
Here's a client that outputs the output of said server and then attempts to
send it a string:
```php
$loop = React\EventLoop\Factory::create();
$connector = new React\Socket\Connector($loop);
$connector->connect('127.0.0.1:8080')->then(function (React\Socket\ConnectionInterface $connection) use ($loop) {
$connection->pipe(new React\Stream\WritableResourceStream(STDOUT, $loop));
$connection->write("Hello World!\n");
});
$loop->run();
```
## Connection usage
### ConnectionInterface
The `ConnectionInterface` is used to represent any incoming and outgoing
connection, such as a normal TCP/IP connection.
An incoming or outgoing connection is a duplex stream (both readable and
writable) that implements React's
[`DuplexStreamInterface`](https://github.com/reactphp/stream#duplexstreaminterface).
It contains additional properties for the local and remote address (client IP)
where this connection has been established to/from.
Most commonly, instances implementing this `ConnectionInterface` are emitted
by all classes implementing the [`ServerInterface`](#serverinterface) and
used by all classes implementing the [`ConnectorInterface`](#connectorinterface).
Because the `ConnectionInterface` implements the underlying
[`DuplexStreamInterface`](https://github.com/reactphp/stream#duplexstreaminterface)
you can use any of its events and methods as usual:
```php
$connection->on('data', function ($chunk) {
echo $chunk;
});
$connection->on('end', function () {
echo 'ended';
});
$connection->on('error', function (Exception $e) {
echo 'error: ' . $e->getMessage();
});
$connection->on('close', function () {
echo 'closed';
});
$connection->write($data);
$connection->end($data = null);
$connection->close();
// …
```
For more details, see the
[`DuplexStreamInterface`](https://github.com/reactphp/stream#duplexstreaminterface).
#### getRemoteAddress()
The `getRemoteAddress(): ?string` method returns the full remote address
(URI) where this connection has been established with.
```php
$address = $connection->getRemoteAddress();
echo 'Connection with ' . $address . PHP_EOL;
```
If the remote address can not be determined or is unknown at this time (such as
after the connection has been closed), it MAY return a `NULL` value instead.
Otherwise, it will return the full address (URI) as a string value, such
as `tcp://127.0.0.1:8080`, `tcp://[::1]:80`, `tls://127.0.0.1:443`,
`unix://example.sock` or `unix:///path/to/example.sock`.
Note that individual URI components are application specific and depend
on the underlying transport protocol.
If this is a TCP/IP based connection and you only want the remote IP, you may
use something like this:
```php
$address = $connection->getRemoteAddress();
$ip = trim(parse_url($address, PHP_URL_HOST), '[]');
echo 'Connection with ' . $ip . PHP_EOL;
```
#### getLocalAddress()
The `getLocalAddress(): ?string` method returns the full local address
(URI) where this connection has been established with.
```php
$address = $connection->getLocalAddress();
echo 'Connection with ' . $address . PHP_EOL;
```
If the local address can not be determined or is unknown at this time (such as
after the connection has been closed), it MAY return a `NULL` value instead.
Otherwise, it will return the full address (URI) as a string value, such
as `tcp://127.0.0.1:8080`, `tcp://[::1]:80`, `tls://127.0.0.1:443`,
`unix://example.sock` or `unix:///path/to/example.sock`.
Note that individual URI components are application specific and depend
on the underlying transport protocol.
This method complements the [`getRemoteAddress()`](#getremoteaddress) method,
so they should not be confused.
If your `TcpServer` instance is listening on multiple interfaces (e.g. using
the address `0.0.0.0`), you can use this method to find out which interface
actually accepted this connection (such as a public or local interface).
If your system has multiple interfaces (e.g. a WAN and a LAN interface),
you can use this method to find out which interface was actually
used for this connection.
## Server usage
### ServerInterface
The `ServerInterface` is responsible for providing an interface for accepting
incoming streaming connections, such as a normal TCP/IP connection.
Most higher-level components (such as a HTTP server) accept an instance
implementing this interface to accept incoming streaming connections.
This is usually done via dependency injection, so it's fairly simple to actually
swap this implementation against any other implementation of this interface.
This means that you SHOULD typehint against this interface instead of a concrete
implementation of this interface.
Besides defining a few methods, this interface also implements the
[`EventEmitterInterface`](https://github.com/igorw/evenement)
which allows you to react to certain events.
#### connection event
The `connection` event will be emitted whenever a new connection has been
established, i.e. a new client connects to this server socket:
```php
$server->on('connection', function (React\Socket\ConnectionInterface $connection) {
echo 'new connection' . PHP_EOL;
});
```
See also the [`ConnectionInterface`](#connectioninterface) f
没有合适的资源?快使用搜索试试~ 我知道了~
盛大大财神多功能完美运营微信+支付宝+银行卡+云闪付+抢单系统源码+完整数据[完美运营级]
共2000个文件
php:740个
png:318个
js:243个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 162 浏览量
2024-10-27
17:20:23
上传
评论
收藏 39.1MB ZIP 举报
温馨提示
盛大大财神多功能完美运营微信+支付宝+银行卡+云闪付+抢单系统源码+完整数据[完美运营级] 这个东西懂的都懂,大财神,功能以及各方面都是很牛的一个。 完美运营级无BUG。VUE + thinkphp5 前后端分离,喜欢的拿去学习研究吧。
资源推荐
资源详情
资源评论
收起资源包目录
盛大大财神多功能完美运营微信+支付宝+银行卡+云闪付+抢单系统源码+完整数据[完美运营级] (2000个子文件)
resolv.conf 19B
api.css 245KB
bootstrap.css 143KB
bootstrap.min.css 137KB
bootstrap.css 124KB
bootstrap.min.css 118KB
AdminLTE.css 108KB
bootstrap.min.css 104KB
bootstrap.min.css 104KB
bootstrap.css 104KB
bootstrap.min.css 98KB
chunk-vendors.42a31fb4.css 95KB
AdminLTE.min.css 88KB
AdminLTE-without-plugins.css 88KB
AdminLTE-without-plugins.min.css 72KB
layui.css 71KB
animate.min.css 57KB
ionicons.min.css 50KB
_all-skins.css 46KB
_all-skins.min.css 40KB
font-awesome.css 37KB
font-awesome.min.css 30KB
font-awesome.min.css 30KB
install.css 26KB
bootstrap-theme.css 26KB
bootstrap-theme.min.css 23KB
bootstrap-responsive.css 22KB
_all.css 21KB
default.css 20KB
googleapis.css 18KB
bootstrap-responsive.min.css 16KB
bootstrap-responsive.min.css 16KB
AdminLTE-bootstrap-social.css 15KB
_all.css 15KB
layer.css 14KB
layer.css 14KB
_all.css 14KB
_all.css 13KB
AdminLTE-bootstrap-social.min.css 12KB
datetimepicker_blue.css 12KB
datetimepicker.css 12KB
ladda.css 12KB
layui.mobile.css 10KB
ladda-themeless.css 10KB
style.css 10KB
fakeLoader.css 9KB
ladda.min.css 9KB
treeTable.css 9KB
laydate.css 8KB
ladda-themeless.min.css 8KB
app.css 7KB
laydate.css 7KB
toastr.min.css 7KB
ob_skin.css 7KB
bootstrap.css 6KB
chunk-5954b8cb.10d9b132.css 6KB
chunk-8450995a.b3dc5e8e.css 6KB
pay.css 6KB
chunk-4a54d6dc.bca761da.css 5KB
default.css 5KB
remodal-default-theme.css 5KB
progressjs.css 5KB
dropdown.css 5KB
layer.css 5KB
chunk-de1e2510.b27a6960.css 5KB
skin-black-light.css 5KB
default.css 5KB
chunk-bca5e196.e9ca3402.css 4KB
skin-blue-light.css 4KB
skin-purple-light.css 4KB
skin-yellow-light.css 4KB
skin-green-light.css 4KB
skin-red-light.css 4KB
chunk-e89410fc.3f55388f.css 4KB
skin-black-light.min.css 4KB
common.css 4KB
skin-black.css 4KB
skin-blue-light.min.css 4KB
skin-yellow-light.min.css 4KB
skin-purple-light.min.css 4KB
chunk-be27a330.9f914c28.css 4KB
skin-green-light.min.css 4KB
skin-red-light.min.css 4KB
chunk-1d99c871.115679f2.css 3KB
skin-blue.css 3KB
chunk-c8976fc8.baa14045.css 3KB
chunk-60b86868.122a6c06.css 3KB
skin-purple.css 3KB
skin-yellow.css 3KB
skin-black.min.css 3KB
skin-green.css 3KB
skin-red.css 3KB
chunk-0ce5875b.923b3fef.css 3KB
chunk-f2e85652.86d8ee32.css 3KB
chunk-aa517006.f8aa48c5.css 3KB
skin-blue.min.css 3KB
chunk-12f83f28.0ab288af.css 3KB
chunk-a0545696.8e99f02a.css 3KB
chunk-d22f8a76.bf54e407.css 3KB
chunk-382193c1.aa63e1ef.css 3KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
破碎的天堂鸟
- 粉丝: 7651
- 资源: 2005
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功