.net c# 写的服务器,能否在一个多用户的服务器上运行一个

时间:2022-08-29 09:43:01
服务器器有A,B,C三个用户

当三个登录时,只允许一个开启服务,另外两个关闭

让 开启服务的用户注销时,其他用户自动切换过来

20 个解决方案

#1


[可以,用application集合,里面可以放全局变量,判断是否有用户,然后注销。, 还可以用static变量,cache存储已经登陆的用户的信息
假如只保留最后登录的用户,那么,当发现有用户已经登陆(假设A,B),从变量中删除A,B,并通知下线(可以考虑用websocket),或者简单点就是,A,B再次访问时,会提示已经下线


, 什么叫做开启、什么又叫做关闭?, 如果你说的只是程序里边 bool 类型的字段或者属性,其实这个意思就不大了。如果你说的是实际的大一点、实际一点的系统行为设计,那么你应该思路“更大一点更贴近用户界面一点”。, 额,昨晚太急,没写好。

意思是,我写了一个服务,然后安装在服务器上面了,但是 那台服务器可以同时连接三个用户,现在好像是有用户进入的时候,每次都会开一个服务,这样好浪费资源, “每次都会开一个服务”还是不懂。

当有1万个实时在线长连接客户端会话,也不过顶多就是有10万个对象而已,不占用任何多余的“线程”,怎么会浪费资源?10万个此类“内存资源”也就是占用几M而已吧?!, 当有1万个实时在线长连接客户端会话,也不过顶多就是有10万个对象而已  -->   当有10万个实时在线长连接客户端会话,也不过顶多就是有10万个对象而已

所以还是不理解你说的“开一个服务”具体是什么概念。, 对于 asp.net 来说,web无连接,那么它更是如此,没有在web服务器运行着什么“服务”,客户端每一次请求服务都是一次短暂的单个请求而已——然后瞬间就断开了连接。实际上 web 服务之所以比其它长连接 tcp 性能差,就是因为它有三次握手、http 协议里边冗余的动态太大而已,这都是通讯意义上的“资源浪费”问题。并没有什么别的。, 不是太清楚,你说的服务的概念。
但是,看你的意思,应该可以使用单例模式来解决。, 我猜测你的意思是.有一个服务任务,在处理一个用户时,不接收其它用户.直到用户处理完成(用户自己主动注销表示完成)后,才能轮到别的用户.如果正在处理时,其它用户进来了,就暂时放到队列里.一直等到当前用户处理完.
那么有个问题,如果当前用户不注销,连接一直保持着,那么其它用户就死等了., linux?为什么会要开启服务?一个用户启动asp.net的项目就行了啊, 我怀疑楼主没有理解服务的概念

你需要的是一个Windows Service,而不是一个桌面启动的Application, 现在我把 服务器期的多用户登录禁用了,现在只能用一个用户登录,现在问题就先这样解决吧。

我那时候的需求是, 我写了一个 .net  window server服务,这个服务器的作用就是 每隔一段时间轮询数据库,用来发送短信的,以及推模板消息的。

这个服务我已经写好了,已经安装在 服务器上面了。

但是那一台服务器,允许多用户登录。(之前是允许3人同时登录的)

因为我的window 服务是 停止或者启动的时候,会有模板消息推送到我的手机的,所以我就发现一个问题,

当我的一个同事A,有事去服务器更新代码时,他进去之后,我写的服务就开始运行了(应该是他新登录到服务器里面了),
然后另外一个同事B,也进入服务器更新别的程序(我们所有程序都在一台云服务器上),当B进去的时候,我也能收到一条 服务启动的微信通知。

所以我就认为,每一个用户进去的时候,服务都会自动启用一个。

由于这个问题的发生,我不知道是,当三个用户进入的时候,就相当于那一个服务器挂了三个服务器,这三个服务做相同的事情,都不断轮询相同的数据库,然后去发送短信,这样我怕会发重复、

所以问,有没有办法避免这个问题, 如果你那是Windows服务进程,应该和用户登录不登录没有关系啊!你不会只是一个桌面App,跟随用户登录桌面自动启动的吧?, 所以这个基本概念我不是很理解~为了安全起见,我就禁用多用户了, windows服务和登录的用户没关系,你不要整个exe文件放到启动里去运行就好了,
引用 5 楼 edfdfg 的回复:
额,昨晚太急,没写好。

意思是,我写了一个服务,然后安装在服务器上面了,但是 那台服务器可以同时连接三个用户,现在好像是有用户进入的时候,每次都会开一个服务,这样好浪费资源

每次都开一个服务?你是怎么做到的?我记得只是new一个实例而不是每次都开启一个服务啊 .net c# 写的服务器,能否在一个多用户的服务器上运行一个, 多用户 多服务 怎么可能...

windows好像不是这样的啊..., 他说了写的服务器,肯定是exe程序咯,肯定是挂在启动项里面咯。
楼主建议好好看看windows服务是什么,怎么做,不要用exe做服务器程序。, WIndows服务和Windows应用程序是不一样的 如是是Windows应用程序 你放在启动菜单里 的话会出现 你说的问题 如果是Windows服务程序 是不会出现你描述的问题的, ]

#1


[可以,用application集合,里面可以放全局变量,判断是否有用户,然后注销。, 还可以用static变量,cache存储已经登陆的用户的信息
假如只保留最后登录的用户,那么,当发现有用户已经登陆(假设A,B),从变量中删除A,B,并通知下线(可以考虑用websocket),或者简单点就是,A,B再次访问时,会提示已经下线


, 什么叫做开启、什么又叫做关闭?, 如果你说的只是程序里边 bool 类型的字段或者属性,其实这个意思就不大了。如果你说的是实际的大一点、实际一点的系统行为设计,那么你应该思路“更大一点更贴近用户界面一点”。, 额,昨晚太急,没写好。

意思是,我写了一个服务,然后安装在服务器上面了,但是 那台服务器可以同时连接三个用户,现在好像是有用户进入的时候,每次都会开一个服务,这样好浪费资源, “每次都会开一个服务”还是不懂。

当有1万个实时在线长连接客户端会话,也不过顶多就是有10万个对象而已,不占用任何多余的“线程”,怎么会浪费资源?10万个此类“内存资源”也就是占用几M而已吧?!, 当有1万个实时在线长连接客户端会话,也不过顶多就是有10万个对象而已  -->   当有10万个实时在线长连接客户端会话,也不过顶多就是有10万个对象而已

所以还是不理解你说的“开一个服务”具体是什么概念。, 对于 asp.net 来说,web无连接,那么它更是如此,没有在web服务器运行着什么“服务”,客户端每一次请求服务都是一次短暂的单个请求而已——然后瞬间就断开了连接。实际上 web 服务之所以比其它长连接 tcp 性能差,就是因为它有三次握手、http 协议里边冗余的动态太大而已,这都是通讯意义上的“资源浪费”问题。并没有什么别的。, 不是太清楚,你说的服务的概念。
但是,看你的意思,应该可以使用单例模式来解决。, 我猜测你的意思是.有一个服务任务,在处理一个用户时,不接收其它用户.直到用户处理完成(用户自己主动注销表示完成)后,才能轮到别的用户.如果正在处理时,其它用户进来了,就暂时放到队列里.一直等到当前用户处理完.
那么有个问题,如果当前用户不注销,连接一直保持着,那么其它用户就死等了., linux?为什么会要开启服务?一个用户启动asp.net的项目就行了啊, 我怀疑楼主没有理解服务的概念

你需要的是一个Windows Service,而不是一个桌面启动的Application, 现在我把 服务器期的多用户登录禁用了,现在只能用一个用户登录,现在问题就先这样解决吧。

我那时候的需求是, 我写了一个 .net  window server服务,这个服务器的作用就是 每隔一段时间轮询数据库,用来发送短信的,以及推模板消息的。

这个服务我已经写好了,已经安装在 服务器上面了。

但是那一台服务器,允许多用户登录。(之前是允许3人同时登录的)

因为我的window 服务是 停止或者启动的时候,会有模板消息推送到我的手机的,所以我就发现一个问题,

当我的一个同事A,有事去服务器更新代码时,他进去之后,我写的服务就开始运行了(应该是他新登录到服务器里面了),
然后另外一个同事B,也进入服务器更新别的程序(我们所有程序都在一台云服务器上),当B进去的时候,我也能收到一条 服务启动的微信通知。

所以我就认为,每一个用户进去的时候,服务都会自动启用一个。

由于这个问题的发生,我不知道是,当三个用户进入的时候,就相当于那一个服务器挂了三个服务器,这三个服务做相同的事情,都不断轮询相同的数据库,然后去发送短信,这样我怕会发重复、

所以问,有没有办法避免这个问题, 如果你那是Windows服务进程,应该和用户登录不登录没有关系啊!你不会只是一个桌面App,跟随用户登录桌面自动启动的吧?, 所以这个基本概念我不是很理解~为了安全起见,我就禁用多用户了, windows服务和登录的用户没关系,你不要整个exe文件放到启动里去运行就好了,
引用 5 楼 edfdfg 的回复:
额,昨晚太急,没写好。

意思是,我写了一个服务,然后安装在服务器上面了,但是 那台服务器可以同时连接三个用户,现在好像是有用户进入的时候,每次都会开一个服务,这样好浪费资源

每次都开一个服务?你是怎么做到的?我记得只是new一个实例而不是每次都开启一个服务啊 .net c# 写的服务器,能否在一个多用户的服务器上运行一个, 多用户 多服务 怎么可能...

windows好像不是这样的啊..., 他说了写的服务器,肯定是exe程序咯,肯定是挂在启动项里面咯。
楼主建议好好看看windows服务是什么,怎么做,不要用exe做服务器程序。, WIndows服务和Windows应用程序是不一样的 如是是Windows应用程序 你放在启动菜单里 的话会出现 你说的问题 如果是Windows服务程序 是不会出现你描述的问题的, ]