Code Monkey home page Code Monkey logo

yasio's Introduction

yasio logo

YASIO - Yet Another Socket I/O library.

Latest Release 996.icu LICENSE GitHub stars GitHub forks codeql

English

yasio 是一个轻量级跨平台的异步网络库,专注于客户端和基于各种游戏引擎的游戏客户端网络服务, 支持 windows、macos、ios、android、linux、freebsd 以及其他类 unix 操作系统。

支持平台

Build Status (github)
Windows(msvc,clang,mingw) Windows Build Status
Windows(vs2013) Windows VS2013 status
Android Android Build Status
iOS/tvOS/watchOS iOS Build Status
Linux Linux Build Status
macOS macOS Build Status
FreeBSD FreeBSD Build Status
Solaris Solaris Build Status

应用案例

  • 放置少女(HD):用于cocos和unity重制版客户端网络传输。
  • 红警OL手游项目:用于客户端网络传输,并且随着该项目于2018年10月17日由腾讯游戏发行正式上线后稳定运行于上千万移动设备上。
  • x-studio软件项目:网络解决方案。
  • QttAudio:语音连麦聊天集成方案。

集成案例

  • Unity
    • yasio_unity:Unity 纯C#封装,打开场景SampleScene运行即可。
    • xlua:将yasio集成到xlua, 打开场景U3DScripting运行即可。
  • UnrealEngine
  • axmol:作为axmol游戏引擎的网络解决方案。

文档

使用g++快速运行tcptest测试程序

g++ tests/tcp/main.cpp --std=c++11 -DYASIO_HEADER_ONLY -lpthread -I./ -o tcptest && ./tcptest

使用CMake编译yasio的测试程序和示例程序

git clone --recursive https://github.com/yasio/yasio
cd yasio

# 如果是 macOS Xcode, 这里命令应该换成:cmake -B build -GXcode
cmake -B build

# 使用CMake命令行编译, 如果需要调试,则使用相应平台IDE打开即可:
# a. Windows:使用VisualStudio打开build/yasio.sln
# b. macOS:使用Xcode打开build/yasio.xcodeproj
cmake --build build --config Debug

# # 者直接用VS打开 

特性:

  • 支持TCP,UDP,KCP传输,且API是统一的。
  • 支持TCP粘包处理,业务完全不必关心。
  • 支持组播。
  • 支持IPv4/IPv6或者苹果IPv6_only网络。
  • 支持处理多个连接的所有网络事件。
  • 支持微秒级定时器。
  • 支持Lua绑定。
  • 支持Cocos2d-x jsb绑定。
  • 支持CocosCreator jsb2.0绑定
  • 支持Unity3D
  • 支持虚幻引擎
  • 支持SSL客户端/服务端, 基于OpenSSL/MbedTLS。
  • 支持非阻塞域名解析,基于c-ares。
  • 支持Header Only集成方式,只需要定义编译预处理器宏YASIO_HEAD_ONLY=1即可。
  • 支持Unix Domain Socket。
  • 支持二进制读写,两个工具类obstream/ibstream非常方便使用。
  • 支持和.net兼容的整数压缩编码方式:7Bit Encoded Int/Int64

关于C++14/17/20

yasio提供了如下可在C++11编译器下使用的C++14/17/20标准库组件,请查看 yasio/string_view.hpp, yasio/shared_mutex.hpp, yasio/memory.hpp

  • cxx14::make_unique
  • cxx17::string_view
  • cxx17::shared_mutex
  • cxx20::starts_with
  • cxx20::ends_with
  • yasio::byte_buffer
  • yasio::pod_vector

关于 OpenSSL 预编译库 (Windows)

yasio 的 cmake 脚本默认选择 OpenSSL 作为 SSL 支持库,并且会自动从1kiss下载, 且预编译库使用 VS2022(MSVC-14.37) 编译,如果你的系统未安装该版本,请传入 CMake 参数-DYASIO_SSL_BACKEND=2,例如使用项目 提供的跨平台一键编译脚本 build.ps1

powershell build.ps1 -p win32 -a x64 -xc "-DYASIO_SSL_BACKEND=2"

框架图

image

QQ交流群

点击加入:829884294

yasio's People

Contributors

anssser avatar bel2020 avatar binesiyu avatar blus007 avatar dependabot[bot] avatar gooderman avatar halx99 avatar huizhen avatar koobin avatar lattice0 avatar whans avatar xinglongli612 avatar y-way avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

yasio's Issues

阻塞接收

请问如果我想不阻塞接收数据 每次给一个固定大小的buffer去接收 然后不管是否接收到拘束马上返回 应该怎么修改recv部分呢

UDP example

大神,框架很棒,cpptest.cpp中的TCP的例子能大概看懂,但是UDP该如何使用呢求指点,是直接使用xxsocket::open(AF_INET, SOCK_DGRAM) 么?

dead loop? bug?

int xxsocket::send(void* buf, int len, int slicelen, int flags) const
{
char* ptr = (char*)buf;
int bytes_leavings = len;
while(bytes_leavings > 0)
{
if(bytes_leavings > slicelen)
{
bytes_leavings -= this->send(ptr, slicelen, flags);
ptr += slicelen;
}
else
{
bytes_leavings -= this->send(ptr, bytes_leavings, flags);
}
}
return len - bytes_leavings;
}

what happened when socket closed by remote? how can this loop quit?

bug?

Error: 10057

Connect to 2 service in file simple_test.cpp

purelib::inet::channel_endpoint endpoints[] = {
		{ "203.162.71.67", 80 },
		{ "www.ip138.com", 80 }
};
......
......
myasio->open(0, CHANNEL_TCP_CLIENT);
myasio->open(1, CHANNEL_TCP_CLIENT);

Many time get error: 10057
Full log:

[mini-asio][1532866023984774] [index: 0] connecting server 203.162.71.67:80...
[mini-asio][1532866023986874] [index: 0] the connection [0.0.0.0:52783] ---> 203.162.71.67:80 is established.
[mini-asio][1532866023987859] [index: 1] connecting server www.ip138.com:80...
[mini-asio][1532866023988676] [index: 0] do_write error, the connection should be closed, retval=-1, ec:10057, detail:A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied.

[mini-asio][1532866023998673] [index: 1] the connection [192.168.33.107:52784] ---> 42.114.104.27:80 is established.
[mini-asio][1532866083426316] [index: 1] do_read error, the server close the connection, retval=0, ec:0, detail:The operation completed successfully.

Please help me. Thanks

support for CocosCreator JSB

覺得大神的框架寫的非常棒,
目前在CocosCerator上目前的使用者也不少,
不知道大神是否能支持CocosCreator( JSB )?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.