在服务器中,我试图将其连接的客户端及其 PID 存储在 ets 表中。
该表在服务器启动时创建
initate_server() ->
ets:new(users, [set, named_table]).
Run Code Online (Sandbox Code Playgroud)
当用户连接到服务器时,我正在调用一个函数
add_user(PID, Nick) ->
ets:insert_new(users, {Nick, PID}).
Run Code Online (Sandbox Code Playgroud)
这反过来会产生一个错误,说我在上面使用了一个错误的参数。是否可以将 PID 存储在这样的 ets 表中?
错误说明如下:
Something went very wrong!
{{case_clause,
{'EXIT',
{badarg,
[{ets,insert,[users,{"user01", <0.66.0>}],[]},
{server, loop, 2,
[{file,
filenames and such...
Run Code Online (Sandbox Code Playgroud)
是的,您可以将 pid 存储在 ETS 表中。badarg错误的原因可能是访问控制。
默认情况下,ETS 表是通过protected访问权限创建的。这意味着任何进程都可以从表中读取值,但只有创建表的进程才能向其写入值。根据您希望它如何工作,您可以让客户端进程向服务器发送消息以插入新值,或者使用public选项创建表,这允许任何进程写入表。
| 归档时间: |
|
| 查看次数: |
808 次 |
| 最近记录: |