简单的gen_server Hello World程序
代码:
-module(genserver).
-behaviour(gen_server).
-export([start/0, hello/1]).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).
start() ->
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
hello(Name) ->
Reply = gen_server:call(?MODULE, {hello, Name}),
io:format("~s~n", [Reply]).
handle_call({hello, Name}, _From, State) ->
Reply = lists:append(["Hello, ", Name, "!"]),
{reply, Reply, State}.
init(_Args) ->
{ok, init}.
handle_cast(_Request, State) ->
{noreply, State}.
handle_info(_Info, State) ->
{noreplay, State}.
terminate(_Reason, _State) ->
ok.
code_change(_OldVsn, State, _Extra) ->
{ok, State}.
编译:
Eshell> c(genserver).
运行:
Eshell> genserver:start().
Eshell> genserver:hello("Hideto").
输出结果:
Hello, Hideto!
分享到:
相关推荐
protoc -I=$SRC_DIR --grpc_out=$DST_DIR --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` $SRC_DIR/helloworld.proto protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/helloworld.proto ``` 4. **实现...
from gen-py.HelloWorld import Processor, HelloWorld from threading import Thread class MyHelloWorldHandler(HelloWorld.Iface): def sayHello(self, msg): return "result: " + msg def run_server():...
在生成的代码中,找到`HelloWorld$Iface`和`HelloWorld$Processor`接口,以及对应的`HelloWorldHandler`类,实现`sayHello`方法。例如: ```java public class HelloWorldHandler implements HelloWorld.Iface { ...
- **C++客户端**:使用生成的C++实现文件,通过HIDL接口调用硬件服务的方法,如`IGunder::helloWorld()`。 - **Android客户端**:生成的Java接口可以被Android应用中的Service或Activity引用,通过Android的Binder...
thrift -gen java helloworld.thrift ``` 这将生成一个`gen-java`目录,其中包含了服务接口、数据结构以及必要的辅助类。 然后,我们需要实现服务端代码。在Java中,这通常涉及到创建一个实现了`HelloWorld`接口的...
- 示例:`io:format("Hello, World!~n").` **1.2.8 一个更大的例子** - **示例**: 实现一个简单的计算器程序,可以进行加、减、乘、除运算。 - **步骤**: - 定义函数接收两个数字和一个运算符。 - 使用条件语句...
protoc -I=$SRC_DIR --grpc_out=$DST_DIR --plugin=protoc-gen-grpc=`which grpc_csharp_plugin` $SRC_DIR/helloworld.proto ``` 3. **创建gRpc服务**: 在.NET Core项目中创建服务实现。根据生成的`IGreeter`接口,...
client.say_hello("World") ``` 这段代码创建了一个HTTP连接到服务器,并通过`say_hello`方法发送一个请求。 Thrift的性能优化包括使用二进制协议(TBinaryProtocol)而非默认的文本协议(TJSONProtocol),以及...
这将生成`helloworld_pb2.py`和`helloworld_pb2_grpc.py`两个文件,分别包含了服务定义的普通Python类和gRPC相关的扩展。 **4. gRPC服务的实现** 在生成Python代码之后,你可以编写服务端代码(server)和客户端...
$result = $client->hello('World'); $transport->close(); echo "Received: " . $result . "\n"; ``` 在Python端,我们需要启动Thrift服务器,实现服务逻辑: ```python from my_service.ttypes import * from ...
response = stub.SayHello(hello_pb2.HelloRequest(name="World")) print("Greeter client received: " + response.message) ``` ### Golang中的gRPC 对于Golang,步骤类似,但语法和库不同。首先,安装gRPC和...
例如,创建一个名为`helloworld.proto`的.proto文件: ```protobuf syntax = "proto3"; package helloworld; service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) {} } message HelloRequest { ...
这将生成 `helloworld.pb.pm` 和 `helloworld_grpc.pb.pm` 文件。 #### 实现服务端 创建一个 Perl 脚本,实现 `Greeter` 服务: ```perl use strict; use warnings; use helloworld::Greeter; use GRPC::Server; ...
// 实现helloworld.GreeterServer方法SayHello func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) { return &pb.HelloReply{Message: "Hello " + in.Name}, nil } ...
这将生成`helloworld_pb.d.ts`和`helloworld_pb.js`文件,包含了服务和消息类型的定义。 现在,我们可以编写服务器端代码: ```typescript import * as grpc from '@grpc/grpc-js'; import { GreeterService } ...
这将生成 `helloworld_pb.js` 和 `helloworld_grpc_pb.js` 文件,分别包含消息类型和 gRPC 服务接口。 3. **实现服务端** 在 Node.js 中,你可以使用生成的代码创建 gRPC 服务器并实现服务接口: ```javascript...
在这个例子中,`MainHandler` 处理所有根路径("/")的 GET 请求,并返回 "Hello, world"。 Tornado 的异步特性允许在处理请求时执行非阻塞操作,例如等待网络 I/O 或定时任务。通过使用 `yield` 关键字(在 Python...
Tornado的入门非常简单,通常从一个`HelloWorld`级别的应用开始。下面是一个典型的Tornado入门级代码示例: ```python import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler):...
response = f"Hello, {data.decode()}!\n" yield stream.write(response) if __name__ == '__main__': server = AsyncTcpServer() server.listen(8888) tornado.ioloop.IOLoop.current().start() ``` - ...
return &greeter_server.HelloReply{Message: "Hello, " + in.Name}, nil } func main() { lis, err := net.Listen("tcp", ":50051") if err != nil { log.Fatalf("Failed to listen: %v", err) } s := grpc...