`
hideto
  • 浏览: 2690095 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Erlang和Ruby的Socket通讯

阅读更多
server.erl
-module(server).
-export([start/0,start/1,process/1]).
-define(defPort, 8888).

start() -> start(?defPort).

start(Port) ->
  case gen_tcp:listen(Port, [binary, {packet, 0}, {active, false}]) of
    {ok, LSock} -> server_loop(LSock);
    {error, Reason} -> exit({Port,Reason})
  end.

%% main server loop - wait for next connection, spawn child to process it
server_loop(LSock) ->
  case gen_tcp:accept(LSock) of
    {ok, Sock} ->
      spawn(?MODULE,process,[Sock]),
      server_loop(LSock);
    {error, Reason} ->
      exit({accept,Reason})
  end.

%% process current connection
process(Sock) ->
  Req = do_recv(Sock),
  Resp = "Hello, " ++ Req ++ "!",
  do_send(Sock,Resp),
  gen_tcp:close(Sock).

%% send a line of text to the socket
do_send(Sock,Msg) ->
  case gen_tcp:send(Sock, Msg) of
    ok -> ok;
    {error, Reason} -> exit(Reason)
  end.

%% receive data from the socket
do_recv(Sock) ->
  case gen_tcp:recv(Sock, 0) of
    {ok, Bin} -> binary_to_list(Bin);
    {error, closed} -> exit(closed);
    {error, Reason} -> exit(Reason)
  end.


client.rb
require 'socket'

client = TCPSocket.open('localhost', 8888)
client.send("hideto", 0)
puts client.readlines
client.close


Erlang服务器编译运行:
Eshell > c(server.erl).
Eshell > server:start().


Ruby客户端解释运行:
> ruby client.rb
Hello, hideto!


分享到:
评论
1 楼 yuky1327 2011-10-11  
ruby实现也太简单了~~~
我想服务端用erlang,客户端用android调用。应该实现的原理也是一样吧?楼主有空给下意见,谢谢。

相关推荐

    教育应用程序接口CNErloungeIII周爱民aimingoo约2530PPT概要.pptx

    这些接口通常通过socket通信协议实现,如http://dryverl.objectweb.org/和http://publish.itpub.net/zt/erlang/index.html提供的资源所示。内部扩展接口则是为C语言这样的低级别语言设计的,以便更直接地与Erlang...

    thrift的使用介绍

    它支持多种编程语言,包括C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Node.js, Smalltalk等,使服务跨语言交互变得容易。 **6. 性能优化** Thrift提供了多种传输和协议选项,可以根据实际需求选择...

    各种语言教程.zip

    Erlang Eslint Express web框架 Git教程 go语言 http html Immutable javascript Lodash Lua Nginx PHPUnit测试工具 python教程 React前端框架 React native APP框架 Redis Redux Ruby Sass Scikit image图像中件...

    Thrift框架使用分享

    Thrift框架通过接口描述语言(IDL)来定义服务,支持多种编程语言,如C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk等,并能生成相应语言的服务端和客户端代码。其传输数据采用二进制...

    RabbitMQ基本知识介绍.pdf

    RabbitMQ 由 Erlang 语言开发,支持多种编程语言的客户端,包括 Python、Ruby、Java、.NET 等。 在 RabbitMQ 中,以下是一些关键概念: 1. **ConnectionFactory**:它是创建 **Connection** 的工厂类,负责建立到 ...

    FileTransferThrift:Thrift的文件传输服务器和客户端,使用Java实现

    它是一个接口定义语言(IDL),允许开发者定义服务接口和服务结构,然后自动生成跨语言的代码,支持C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa等多种语言。Thrift的主要优点在于其轻量级的...

    Python部署web开发程序的几种方法

    uWSGI的进程控制程序是用C语言编写的,因此性能优异,支持多种应用框架,包括Python、Lua、Ruby、Erlang和Go等。 #### 4. mod_python mod_python是Apache的一个模块,能够将Python脚本嵌入到Apache服务器中。然而...

Global site tag (gtag.js) - Google Analytics