(17)Ruby使用UnixSocket
2021/6/1 20:21:03
本文主要是介绍(17)Ruby使用UnixSocket,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
UnixSocket和UnixServer
Ruby提供了特殊的Unix套接字类,在底层你可以访问操作系统.
它可以让你实现客户端和服务器为面向连接和无连接协议的基本套接字支持。
核心:获取在线帮助UNIXSoket.methods (require socket)
=> [:pair, :socketpair, :select, :pipe, :open, :attr, :attr_reader, :attr_writer, :attr_accessor, :new, :sysopen, :popen, :foreach, :read, :binread, :binwrite, :write, :readlines, :send, ]
使用Ruby完成UnixSocket的数据传输
1) Ruby 提供了UNIXSocket类的 new 方法来创建一个基础的Unix套接字。
使用代码:UNIXSocket.new("/var/run/mysql/mysql.sock") 创建一个不存在的 unix 套接字。
该类方法可以兼顾bind绑定文件能力,而且,文件的实际创建过程由bind功能完成。
2) Ruby 提供了UNIXSocket类的 open 方法来连接一个指定的Unix套接字。
使用代码:UNIXSocket.open("/var/run/mysql/mysql.sock") 连接一个已存在的 unix 套接字。
这类方法返回一个客户端套接字,数据发送将通过连接的套接字文件传递
3) Ruby 提供了UNIXSocket类的 send 方法来向这个的Unix套接字的发送数据
使用代码:UNIXSocket.send('message', flag) 发送数据到指定的unix套接字
4) Ruby 提供了UNIXSocket类的 recv 方法来接收来自这个的Unix套接字的数据
使用代码:UNIXSocket.recv(number) 接收来自指定unix套接字的数据
使用Ruby完成UnixServer的数据传输
a) Ruby 提供了UNIXServer类的 new 方法来创建一个基础的Unix套接字。
使用代码:UNIXServer.new("/var/run/mysql/mysql.sock") 创建一个服务端的 unix 套接字。
这个方法:封装了bind创建相关文件,并listen监听该文件的能力
b) Ruby 提供了UNIXServer类的 open 方法来连接一个存在的Unix套接字。
使用代码:UNIXServer.open("/var/run/mysql/mysql.sock") ,同上一个方法
c) Ruby 提供了UNIXServer类的 accept 方法来接受来自这个的Unix套接字的数据
使用代码:UNIXServer.accept() 无参数,接收来自客户的连接请求。
d) Ruby 提供了UNIXServer类的 close 方法来关闭这个的Unix套接字的连接
使用代码:UNIXServer.close() 关闭连接
代码实例(客户端):
require 'socket' s = UNIXSocket.new("/tmp/sock") s.send "hello", 0 UNIXServer.open("/tmp/sock") {|serv| UNIXSocket.open("/tmp/sock") {|c| s = serv.accept s.puts "hi" s.close p c.read #=> "hi\n" } }
服务端代码:
require 'socket' serv = UNIXServer.new("/tmp/sock") begin # emulate blocking accept sock = serv.accept_nonblock rescue IO::WaitReadable, Errno::EINTR IO.select([serv]) retry end # sock is an accepted socket.
require 'socket' include Socket::Constants socket = Socket.new( AF_INET, SOCK_STREAM, 0 ) sockaddr = Socket.pack_sockaddr_in( 2200, 'localhost' ) socket.bind( sockaddr ) socket.listen( 5 )
这篇关于(17)Ruby使用UnixSocket的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-30uniAPP 实现全屏左右滚动滚动的效果-icode9专业技术文章分享
- 2024-06-30如何在本地使用授权或插件-icode9专业技术文章分享
- 2024-06-30伪静态规则配置方法汇总-icode9专业技术文章分享
- 2024-06-29易优CMS安装常见问题汇总-icode9专业技术文章分享
- 2024-06-28易优新手必读安装教程-icode9专业技术文章分享
- 2024-06-28忘记eyoucms后台密码怎么办?-icode9专业技术文章分享
- 2024-06-26终极指南:Scrum中如何设置需求优先级
- 2024-06-26AI大模型企业应用实战(25)-为Langchain Agent添加记忆功能
- 2024-06-26小白家庭 nas 搭建方案-icode9专业技术文章分享
- 2024-06-23AI大模型企业应用实战(14)-langchain的Embedding