Hi Pablo,

Yes, we are still using it for our board gaming platform www.happymeeple.com
It is now a 10 year project so I am not sure how easy it really is to 
switch. I am a little bit worried. I suppose the installation of 
websocket/nodejs would not be the hardest part. But adapting the code on 
the server and client side would. We have 9000 lines of code on the server 
alone. Most of it is quite simple, and would not require much work but some 
parts would certainly be a bit problematic. I suppose the client side could 
be more difficult as interactions with APE are scattered everywhere and it 
is impossible to test every scenario. 
We rely on APE for:
- playing moves obviously
- chat (quite a few chats zones (one-on-one, by country and general chat)
- playing some AI on the server side (as well as client side), the same 
(game and AI) code is used on both sides.
- Mysql calls

How easy it would be to rewrite the platform for websocket/nodejs is not 
clear to me right now.

And APE is not that bad. Overall, it crashes maybe 5-6 times per year. It 
is not that unstable. It is much less since I recompiled it to increase the 
memory it uses (which is fixed). Before that, I reached the memory limit 
too quickly and boom.

I'll write an email to you with extra information.

Thanks for offering your help!

Nicolas.



On Wednesday, 14 October 2020 at 06:40:29 UTC+2 Pablo wrote:

> Hello Nicolas,
>
> I still can't believe you have not given up on APE yet. You are probably 
> the only person keeping APE alive in the wild. When I first joined this 
> project the server was very unstable so it is very hard to believe someone 
> is still relying on this server unless they are running a really old 
> version which is somewhat stable or are running a custom build like 
> yourself.
>
> I remember when I first picked up APE, at first glance and for proof of 
> concepts the technology looked great until you tried to do something more 
> serious. Then all of its issues and shortcomings become clearly apparent. 
> Having to constantly restart the server to keep a somewhat stable service 
> is far from ideal.
>
> What site or business are you running, was it a gaming or bidding site? 
> Anyhow, I've been looking to do some additional coding in my spare time 
> since I don't have a good project to work of my own. Let me know if you 
> need help coming up with a strategy to migrate your service to something 
> like Pusher, Firebase or Socket.io
>
> On Tue, Oct 13, 2020 at 2:25 PM Alok Vad <[email protected]> wrote:
>
>> Hi, 
>> Thank you for your help.
>>
>> On Tue, Oct 13, 2020 at 12:15 PM Nicolas <[email protected]> wrote:
>>
>>> I know this is a very old thread and not many of you are still around. 
>>> But let me try my luck once more.
>>>
>>> I can confirm that my APE server sometimes crashes a few hours after 
>>> being restarted. 
>>>
>>> Oct 13 01:21:03 server56405 kernel: [8981559.624862] traps: 
>>> aped_2[19153] general protection ip:418dce sp:7ffeff989060 error:0 in 
>>> aped_2[400000+2a000]
>>>
>>> I had recompiled the code a few years ago (to increase memory) so I 
>>> guess I have got the last corrections.  
>>> The error is 0, pointing to a division by 0. Which I find a bit strange 
>>> here. I don't see any division in the code below.
>>> The ip given above leads to ape_disconnect() function from servers.c.
>>> And more precisely to the line:
>>>              if (co->fd == sub->client->fd) {...
>>> I suspect the error does not come from this if statement, but rather the 
>>> inside of the if.
>>> It could be the call to http_headers_free()
>>> Or most likely the line: deluser(sub->user, g_ape);
>>>
>>> I don't expect a full resolution of the case and will not recompile a 
>>> modified version of the code. But here are a few questions I have. If you 
>>> have any clue for any of them, let me know!
>>> 1) From the general protection error line, is there any way to be more 
>>> precise as to where the general protection  exactly kicks in? Can we know 
>>> if it is on the if statement or below? Could it be in an inner function?
>>> 2) My best guess is that the problem is related to deleting users or 
>>> sub-users. And it looks to me that users that were connected before the 
>>> program was restarted find a way to interact with the new instance and make 
>>> it crash (like a non-existent user asks to logout and boom!).
>>> Do you have any clue how this can be possible?
>>> If I knew that, I could maybe modify my client so that it does not send 
>>> a request that makes a new instance crash.
>>>
>>> Some of the C code below.
>>>
>>> Many thanks!
>>>
>>>
>>> static void ape_disconnect(ape_socket *co, acetables *g_ape){
>>> subuser *sub = (subuser *)(co->attach);
>>> if (sub != NULL) {
>>> if (sub->wait_for_free == 1) {
>>> free(sub);
>>> co->attach = NULL;
>>> return; 
>>> }
>>> // THIS IS WHERE THE GENERAL PROTECTION KICKS IN. 
>>> // THIS IS WHERE THE GENERAL PROTECTION KICKS IN. 
>>> // THIS IS WHERE THE GENERAL PROTECTION KICKS IN. 
>>> // THIS IS WHERE THE GENERAL PROTECTION KICKS IN.
>>> // THIS IS WHERE THE GENERAL PROTECTION KICKS IN.  ------------>>>
>>> if (co->fd == sub->client->fd) {                          
>>>  
>>> <<<<<<<<<<-------------------------------------------------------------------------
>>> sub->headers.sent = 0;
>>> sub->state = ADIED;
>>> http_headers_free(sub->headers.content);
>>> sub->headers.content = NULL;
>>> if (sub->user != NULL) {
>>> if (sub->user->istmp) {
>>> deluser(sub->user, g_ape);
>>> co->attach = NULL;
>>> }
>>> }
>>> }
>>> }
>>> }  
>>>
>>> void http_headers_free(http_headers_response *headers){
>>> struct _http_headers_fields *fields;
>>> if (headers == NULL) {return;}
>>> fields = headers->fields;
>>> while(fields != NULL) {
>>> struct _http_headers_fields *tmpfields = fields->next;
>>> free(fields->value.val);
>>> free(fields);
>>> fields = tmpfields;
>>> }
>>> free(headers); 
>>> }
>>>
>>> void deluser(USERS *user, acetables *g_ape){
>>> if (user == NULL) {
>>> return;
>>> }
>>> left_all(user, g_ape);
>>> FIRE_EVENT_NULL(deluser, user, user->istmp, g_ape);
>>> /* kill all users connections */
>>> clear_subusers(user, g_ape);
>>> hashtbl_erase(g_ape->hSessid, user->sessid);
>>> g_ape->nConnected--;
>>> if (user->prev == NULL) {
>>> g_ape->uHead = user->next;
>>> } else {
>>> user->prev->next = user->next;
>>> }
>>> if (user->next != NULL) {
>>> user->next->prev = user->prev;
>>> }
>>> clear_sessions(user);
>>> clear_properties(&user->properties);
>>> destroy_pipe(user->pipe, g_ape);
>>> /* TODO Add Event */
>>> free(user);
>>> }  
>>>
>>>
>>>
>>> void left_all(USERS *user, acetables *g_ape){
>>> CHANLIST *list, *tList;
>>> if (user == NULL) {
>>> return;
>>> }
>>> list = user->chan_foot;
>>> while (list != NULL) {
>>> tList = list->next;
>>> left(user, list->chaninfo, g_ape);
>>> list = tList;
>>> }
>>> } 
>>>  
>>>
>>>
>>> void clear_subusers(USERS *user, acetables *g_ape){
>>> while (user->subuser != NULL) {
>>> delsubuser(&(user->subuser), g_ape);
>>> }
>>> } 
>>>  
>>>
>>>>
>>>> -- 
>>> -- 
>>> You received this message because you are subscribed to the Google
>>> Groups "APE Project" group.
>>> To post to this group, send email to [email protected]
>>> To unsubscribe from this group, send email to
>>> [email protected]
>>> For more options, visit this group at
>>> http://groups.google.com/group/ape-project?hl=en
>>> ---
>>> APE Project (Ajax Push Engine)
>>> Official website : http://www.ape-project.org/
>>> Git Hub : http://github.com/APE-Project/
>>>
>>> --- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "APE Project" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to [email protected].
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/ape-project/051fe946-6512-4486-92b7-9ecdcbe1cba9n%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/ape-project/051fe946-6512-4486-92b7-9ecdcbe1cba9n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> -- 
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "APE Project" group.
>> To post to this group, send email to [email protected]
>> To unsubscribe from this group, send email to
>> [email protected]
>> For more options, visit this group at
>> http://groups.google.com/group/ape-project?hl=en
>> ---
>> APE Project (Ajax Push Engine)
>> Official website : http://www.ape-project.org/
>> Git Hub : http://github.com/APE-Project/
>>
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "APE Project" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>>
> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/ape-project/CAOx4vSSg9R%2BNQa1i8uz6BOZ3mw%3DYh_kQnWMCbW5bDjagt%2B_PJA%40mail.gmail.com
>>  
>> <https://groups.google.com/d/msgid/ape-project/CAOx4vSSg9R%2BNQa1i8uz6BOZ3mw%3DYh_kQnWMCbW5bDjagt%2B_PJA%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
-- 
You received this message because you are subscribed to the Google
Groups "APE Project" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/ape-project?hl=en
---
APE Project (Ajax Push Engine)
Official website : http://www.ape-project.org/
Git Hub : http://github.com/APE-Project/

--- 
You received this message because you are subscribed to the Google Groups "APE 
Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ape-project/36c4399b-4fca-40d3-a85c-44524f38238fn%40googlegroups.com.

Reply via email to