Forums before death by AOL, social media and spammers... "We can't have nice things"
|    alt.bbs.synchronet    |    Rob Swindell fetishistic worship forum    |    26,287 messages    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
|    Message 25,315 of 26,287    |
|    BBS Coder to All    |
|    BBS architecture questions    |
|    05 Nov 22 15:51:25    |
      From: interlinked.us@gmail.com              I have a few development-related questions, not explicitly about SBBS, but the       architecture of SBBS and other BBSs in general (mainly for Digital Man, but       any insights welcome).              I've been contemplating writing my own BBS software for a while, from the       ground up, in order to better accomplish certain objectives. I have a custom       board that's mainly a hacked hodge podge of shell scripts that I haven't       touched in years... at the        time I wasn't interested in writing a real BBS but I think it makes more sense       now. SBBS is neat as well but I'd like to write something of my own.              As background, I have a fair amount of C development experience working on       large, multi-threaded programs, sockets, shared object modules,        seudoterminals, etc - a lot of the relevant systems programming. However, I'm       a bit stuck on conceiving the        optimal architecture for something like this, or how SBBS is architected. I'm       familiar with server processes that run as a daemon where other "client"       processes can connect to it using a socket (commonly Unix domain socket) to       get a "remote" console (       remote as in remote to the actual daemon process). Each TTY is handled by a       separate "remote" process communicating with the daemon process via a socket,       and the daemon process has all the actual logic, loads all the dynamic       modules, etc.              One thing I'd like to preserve is being able to dynamically reload modules. If       you have a single daemon process loading modules, you can dlclose and dlopen       them again and basically hot reload part of your program. The client processes       don't touch that,        so you can reload functionality while the program is running and users are       connected.              I'm not 100% sure how this best translates into the BBS world. If you take       something like ncurses, ncurses really does not like multithreaded programs (I       know there is a version that supports it, but it's really not a widely       supported configuration). So        I'm questioning the aspect of "everything" actually being in a single process,       and wondering if there's some other architecture programs like SBBS, for good       reason, that works better.              I've browsed through a lot of source code, and I understand some different       things that are going on, but SBBS is so large that I haven't gotten a crisp       understanding of everything this way. So kind of at a high level, I'm curious       if you could discuss a        little bit about some of the following things:       - Client server model: process/thread hierarchy, how remote TTYs       pseudoterminals interact with the main server process (what processes and       threads are involved for a TTY)       - Usage of sockets vs. pseudoterminals in SBBS       - How ncurses is used (all in one thread, all in separate processes, etc.)              As a specific example, say a new client connects (say via telnet), so the SBBS       telnet thread/process spawns a new thread/process for that, and the main       process gets a handle to the slave PTY. (I have to imagine the PTY is needed,       as opposed to just a        Unix domain socket). SIGWINCH is per-process, so now you have SIGWINCH going       to the entire main process on a resize (ouch?). And if you want to run       ncurses, unlike normal text I/O, you can't just do that in the threads in the       main process handling the        remote clients.       Obviously I'm sure that's not quite how SBBS works but an example of things       I've been pondering.              Again, I'm not asking about how to program anything specifically, just looking       for some thoughts and explanation on the architecture itself. Sorry if these       questions are a little windy, but I think any insight you might have would       really help, and the        rest will probably make more sense at that point...              Thanks!              --- SoupGate-Win32 v1.05        * Origin: you cannot sedate... all the things you hate (1:229/2)    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
(c) 1994, bbs@darkrealms.ca